2016-09-15 2 views
1

私はここで壁に向かって頭を叩いています。私は似たStackOverflowの質問を数十回見てきましたが、彼らは私を近づけますが、私が必要なものはまだ見つけていません。 私はデータベースに何千もの質問を持っています。私は答えを集計して質問ごとの別個の回答の数を表示する必要があります。それは簡単な部分です。私が抱えているのは、それぞれの質問に対して与えられた回答の合計数を示す合計欄を追加することです。 Where句を特定の質問に限定するとできますが、可能であれば、このすべてを1つのクエリにまとめようとしています。 はここにクエリの:私は必要なものカウント(*)と同じ行の合計

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

非常に素早い答えと、適切な構文に対する丁寧な説明をありがとう。私は、そこにどこかに、私はそれが私のクエリではないと言及すべきだったと思います、私はそれを継承しました。しかし、それは問題に密接に関連していないので、私はそれを少し修正しました。コンテキストを少し明確にするために、私はGroupIDにuserIDを含めることを忘れました。私の悪い。 しかし、もう一度、迅速で正確で非常に役立つ応答に感謝します。 – crazybobcat

関連する問題