计数(*)和Sum在同一行

cra*_*cat 1 sql sql-server sum count

我在这里撞击墙壁.我已经看过几十个类似的StackOverflow问题了,它们让我很接近,但我还没找到一个能满足我需求的问题.我在数据库中有数千个问题,每个问题都有多个用户的答案.我需要汇总答案,以显示每个问题的不同答案的数量.这是最容易的部分; 我磕磕绊绊的地方在于添加一个Sum列来显示每个问题的答案总数.如果我将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
Run Code Online (Sandbox Code Playgroud)

我需要的是一个看起来像这样的结果集

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
Run Code Online (Sandbox Code Playgroud)

该集合将答案显示为汇总,并将该特定答案的计数以及提供给每个不同问题的答案数量的总和.

任何和所有的帮助非常感谢.

Gor*_*off 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;
Run Code Online (Sandbox Code Playgroud)

此外,最好使用表别名缩写而不是任意字母的表别名.