我有一个查询,它从答案表中获取平均分,并按问题所在的类别对其进行分组。
此查询可获得其中coach_id = 0 的答案所需的结果 这是期望的结果,其中每个coach_id我得到另一行
现在我的问题是:是否也可以从同一个表中获得相同的答案(所以几乎相同的查询)但是在同一个地方,coach_id = 1或者coach_id = 2 ..查询?##
这是我的查询
SELECT
ROUND((SUM(score) / COUNT(vragen.id) * 10),1) as score
FROM antwoorden
JOIN vragen
ON vragen.id = antwoorden.vraag_id
JOIN categorieen
ON categorieen.id = vragen.categorie_id
WHERE antwoorden.werknemer_id = 105 AND antwoorden.coach_id = 0
GROUP BY categorieen.id
有什么想法吗?谢谢!
答案 0 :(得分:1)
由于您尚未提供表模式,因此我很难为您的实际示例编写查询。你想要的是SUM(IF(...))
模式,聚合在条件:
SELECT
foo_id,
SUM(IF(bar_id = 1, baz, 0)) as sum_baz_bar_1,
SUM(IF(bar_id = 2, baz, 0)) as sum_baz_bar_2,
SUM(IF(bar_id = 3, baz, 0)) as sum_baz_bar_3
FROM table
WHERE ...
GROUP BY foo_id
使用此模式时,您需要仔细考虑聚合函数,尤其是使用COUNT
或其他处理值存在的函数(例如0
)而不是它的值
如果您发布了表格模式(SHOW CREATE TABLE
),或者甚至更好地在sqlfiddle.com上设置了示例数据集,我很乐意帮助您了解如何使用您的实际模式。
答案 1 :(得分:1)
我想你想要的是条件总和。
列得分_0,得到coach_id = 0的平均得分。 列得分_1,得到coach_id = 1的平均得分。
计数也不会有效,因为伯爵......算一切! coach_id 0和1.所以你也必须在那里使用条件和。
除此之外,您还需要Neville K建议的coach_id过滤器。
所以:
SELECT
ROUND((
SUM(CASE WHEN antwoorden.coach_id = 0 THEN score ELSE 0 END) /
SUM(CASE WHEN antwoorden.coach_id = 0 THEN 1 ELSE 0 END) * 10
), 1) as score_0,
ROUND((
SUM(CASE WHEN antwoorden.coach_id = 1 THEN score ELSE 0 END) /
SUM(CASE WHEN antwoorden.coach_id = 1 THEN 1 ELSE 0 END) * 10
), 1) as score_1
FROM antwoorden
JOIN vragen
ON vragen.id = antwoorden.vraag_id
JOIN categorieen
ON categorieen.id = vragen.categorie_id
WHERE antwoorden.werknemer_id = 105 AND antwoorden.coach_id IN (0,1)
GROUP BY categorieen.id
我认为这就是你的意思。
答案 2 :(得分:0)
是。
您可以使用in
子句
... antwoorden.coach_id in (0, 1, 2)