如何添加具有多个 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