一个查询多个在哪里?

时间:2014-02-06 09:12:43

标签: mysql sql

我有一个查询,它从答案表中获取平均分,并按问题所在的类别对其进行分组。

此查询可获得其中coach_id = 0 的答案所需的结果 这是期望的结果,其中每个coach_id我得到另一行

enter image description here

现在我的问题是:是否也可以从同一个表中获得相同的答案(所以几乎相同的查询)但是在同一个地方,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

有什么想法吗?谢谢!

3 个答案:

答案 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)