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)
该集合将答案显示为汇总,并将该特定答案的计数以及提供给每个不同问题的答案数量的总和.
任何和所有的帮助非常感谢.
首先,学习使用正确的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)
此外,最好使用表别名缩写而不是任意字母的表别名.
| 归档时间: |
|
| 查看次数: |
84 次 |
| 最近记录: |