2016-09-15 3 views
1

나는 벽에 머리를 치고있어. 비슷한 StackOverflow 수십 개의 질문을 보았습니다. 그리고 그들은 나를 가까이에 가져 왔지만, 내가 필요한 것을 하나도 발견하지 못했습니다. 나는 여러 질문에서 각각의 질문에 대한 답변을 데이터베이스에 수천 가지의 질문으로 가지고 있습니다. 질문마다 고유 답변 수를 표시하는 답변을 집계해야합니다. 그것은 쉬운 부분입니다. 나는 각 질문에 대해 주어진 총 응답 수를 표시하기 위해 합계 열을 추가하는 데 걸림돌이됩니다. Where 절을 특정 질문으로 제한하면이 작업을 수행 할 수 있지만 가능하면이 작업을 모두 하나의 쿼리로 가져 오려고합니다. 다음은 쿼리 :카운트 (*)와 같은 행의 합

select c.ID, a.userID. c.question, a.answer, count(a.answer) as cnt 
from NotableAnswers a, categories b, questions c 
where c.fkCategory = b.ID and a.questionID = c.ID and b.ID = 18 
Group By a.answer, c.ID, c.question 
Order By c.ID, answer asc 

는 내가 필요로하는 것은이

ID | userID | Question | Answer | cnt | totcnt 
------------------------------------------------------------------ 
175 | 10318 |Favorite... |Dropbox  | 15 |  35 
175 | 10354 |Favorite... |Box   | 2 |  35 
175 | 10323 |Favorite... |Google Drive | 15 |  35 
175 | 103111 |Favorite... |Cubby   | 3 |  35 
186 | 10318 |Best IDE... |IntelliJ  | 4 |  12 
186 | 103613 |Best IDE... |Android Studio| 6 |  12 
186 | 103117 |Best IDE... |Eclipse  | 2 |  12 

세트처럼 보이는 결과 집합 집계로 대답과의 합과 함께 특정 대답의 수를 보여줍니다 각 개별 질문에 제공된 답변의 수.

모든 도움을 주시면 감사하겠습니다.

답변

5

먼저 올바른 join 구문을 사용하는 방법을 익히십시오. 간단한 규칙 : 쉼표는 FROM 절에 사용하십시오. 항상은 적절한 명시 적 JOIN 구문을 사용합니다.

select q.ID, a.userID. q.question, a.answer, count(a.answer) as cnt, 
     sum(count(a.answer)) over (partition by q.id) as total_cnt 
from NotableAnswers a join 
    questions q 
    on a.questionID = q.ID join 
    categories c 
    on q.fkCategory = c.ID 
where c.ID = 18 
Group By a.answer, c.ID, c.question 
Order By q.ID, answer asc; 

또한, 오히려 임의의 문자보다 테이블 이름에 대한 약어입니다 테이블 별칭을 사용하는 것이 좋습니다 :

둘째, 대답은 윈도우 함수입니다.

+0

진지하게 너무 빨리 ... 나는 막 게시하려고했습니다. – scsimon

+0

'SELECT' 문에서'a.userID'는 어떨까요? 그룹별로 또는 "전체"기능이 없습니다. – CodyMR

+0

매우 빠른 답변과 적절한 구문에 대한 완곡 한 전환에 감사드립니다. 나는 어딘가에있을 것 같은데, 내 쿼리가 아니라는 것을 언급 했어야했다. 나는 그것을 상속했다. 하지만, 그게 문제와 밀접한 관계가 아니고 컨텍스트를 좀 더 명확하게하기 위해 약간 수정했습니다. 즉, Group By에 userID를 포함하는 것을 잊었습니다. 내 잘못이야. 다시 한번 빠르고 정확하고 유용한 답변에 감사드립니다. – crazybobcat