我正把头靠在墙上,在这里。我看过几十个类似的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
我需要的是一个看起来像这样的结果集
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
此集合将答案显示为汇总,以及该特定答案的计数以及为每个不同问题提供的答案数量之和。
任何和所有帮助都非常感激。
答案 0 :(得分: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;
此外,最好使用表别名缩写而不是任意字母的表别名。