如何添加具有多个 WHERE 条件的 SUM?
How do i add SUM with multiple WHERE condition?
我目前面临多个 WHERE 条件的问题
我正在努力做到这一点。
SUM(IF SUM(B.answer) is lesser than 5),
SUM(IF SUM(B.answer) is between 6-10),
SUM(IF SUM(B.answer) is between 11-15),
SUM(IF SUM(B.answer) is greater than 16)
GROUP BY A.schlvl
期待这样的结果:
希望有人能理解我的解释
SELECT DISTINCT A.schlvl AS school, COUNT(DISTINCT(A.name)) AS NoOfChild, CASE WHEN SUM(B.answer)<5 THEN SUM(B.answer) END FROM child AS A INNER JOIN question AS B ON A.child_id = B.child_id
WHERE SUM(B.answer) IN (<5,>=6 && <=10,>=11 && <=15,>=16)
GROUP BY A.schlvl
与其在 CASE WHEN 中使用 SUM,不如对 CASE WHEN 求和。
然而在这种情况下,当查看预期结果的屏幕截图时?
我认为它需要 COUNT。
示例:
SELECT
A.schlvl AS [School Level],
COUNT(DISTINCT(A.name)) AS [Total No. Of Children],
COUNT(DISTINCT CASE WHEN B.sum_answer <= 5 THEN A.name END) AS [le 5],
COUNT(DISTINCT CASE WHEN B.sum_answer between 6 and 10 THEN A.name END) AS [6 to 10],
COUNT(DISTINCT CASE WHEN B.sum_answer between 11 and 15 THEN A.name END) AS [11 to 15],
COUNT(DISTINCT CASE WHEN B.sum_answer >= 16 THEN A.name END) AS [ge 16]
FROM child AS A
LEFT JOIN
(
SELECT child_id, SUM(answer) AS sum_answer
FROM question
GROUP BY child_id
) AS B ON A.child_id = B.child_id
GROUP BY A.schlvl
此外,如果需要对聚合 (f.e.SUM, COUNT) 进行限制,则可以在 HAVING 子句中执行此操作。
我目前认为这里不需要。
因为获得 <=5 or between 6 and 15 or >=16
的范围几乎不是一个限制。你需要它们吗?
如果您需要对聚合结果进行筛选,则必须使用 having 而不是 where
并且您应该使用范围为
的有效 or 子句而不是 in 子句
SELECT DISTINCT A.schlvl AS school
, COUNT(DISTINCT(A.name)) AS NoOfChild
, CASE WHEN SUM(B.answer)<5 THEN SUM(B.answer) END
FROM child AS A
INNER JOIN question AS B ON A.child_id = B.child_id
HAVING SUM(B.answer) IN (<5,>=6 && <=10,>=11 && <=15,>=16)
HAVING SUM(B.answer) < 5
OR (SUM(B.answer) >=6 AND SUM(B.answer) <=10)
OR (SUM(B.answer) >=11 AND SUM(B.answer) <=15)
OR (SUM(B.answer) >=16)
GROUP BY A.schlvl
我目前面临多个 WHERE 条件的问题 我正在努力做到这一点。
SUM(IF SUM(B.answer) is lesser than 5),
SUM(IF SUM(B.answer) is between 6-10),
SUM(IF SUM(B.answer) is between 11-15),
SUM(IF SUM(B.answer) is greater than 16)
GROUP BY A.schlvl
期待这样的结果:
希望有人能理解我的解释
SELECT DISTINCT A.schlvl AS school, COUNT(DISTINCT(A.name)) AS NoOfChild, CASE WHEN SUM(B.answer)<5 THEN SUM(B.answer) END FROM child AS A INNER JOIN question AS B ON A.child_id = B.child_id
WHERE SUM(B.answer) IN (<5,>=6 && <=10,>=11 && <=15,>=16)
GROUP BY A.schlvl
与其在 CASE WHEN 中使用 SUM,不如对 CASE WHEN 求和。
然而在这种情况下,当查看预期结果的屏幕截图时?
我认为它需要 COUNT。
示例:
SELECT
A.schlvl AS [School Level],
COUNT(DISTINCT(A.name)) AS [Total No. Of Children],
COUNT(DISTINCT CASE WHEN B.sum_answer <= 5 THEN A.name END) AS [le 5],
COUNT(DISTINCT CASE WHEN B.sum_answer between 6 and 10 THEN A.name END) AS [6 to 10],
COUNT(DISTINCT CASE WHEN B.sum_answer between 11 and 15 THEN A.name END) AS [11 to 15],
COUNT(DISTINCT CASE WHEN B.sum_answer >= 16 THEN A.name END) AS [ge 16]
FROM child AS A
LEFT JOIN
(
SELECT child_id, SUM(answer) AS sum_answer
FROM question
GROUP BY child_id
) AS B ON A.child_id = B.child_id
GROUP BY A.schlvl
此外,如果需要对聚合 (f.e.SUM, COUNT) 进行限制,则可以在 HAVING 子句中执行此操作。
我目前认为这里不需要。
因为获得 <=5 or between 6 and 15 or >=16
的范围几乎不是一个限制。你需要它们吗?
如果您需要对聚合结果进行筛选,则必须使用 having 而不是 where 并且您应该使用范围为
的有效 or 子句而不是 in 子句 SELECT DISTINCT A.schlvl AS school
, COUNT(DISTINCT(A.name)) AS NoOfChild
, CASE WHEN SUM(B.answer)<5 THEN SUM(B.answer) END
FROM child AS A
INNER JOIN question AS B ON A.child_id = B.child_id
HAVING SUM(B.answer) IN (<5,>=6 && <=10,>=11 && <=15,>=16)
HAVING SUM(B.answer) < 5
OR (SUM(B.answer) >=6 AND SUM(B.answer) <=10)
OR (SUM(B.answer) >=11 AND SUM(B.answer) <=15)
OR (SUM(B.answer) >=16)
GROUP BY A.schlvl