这个CASE语句有什么问题:它不是SUM?

时间:2018-07-10 12:25:23

标签: mysql

在CASE语句中未对温度场INT(11)求和:

SELECT storenumber as storenumber,
  SUM((CASE temperature WHEN temperature <  0              THEN SumOfTotalPrice ELSE 0 END)) AS Under0,
  SUM((CASE temperature WHEN temperature BETWEEN  0 AND 20 THEN SumOfTotalPrice ELSE 0 END)) AS `0To20`,
  SUM((CASE temperature WHEN temperature BETWEEN 21 AND 30 THEN SumOfTotalPrice ELSE 0 END)) AS `21To30`,
  SUM((CASE temperature WHEN temperature BETWEEN 31 AND 40 THEN SumOfTotalPrice ELSE 0 END)) AS `31To40`,
  SUM((CASE temperature WHEN temperature BETWEEN 41 AND 50 THEN SumOfTotalPrice ELSE 0 END)) AS `41To50`,
  SUM((CASE temperature WHEN temperature BETWEEN 51 AND 60 THEN SumOfTotalPrice ELSE 0 END)) AS `51To60`,
  SUM((CASE temperature WHEN temperature BETWEEN 61 AND 70 THEN SumOfTotalPrice ELSE 0 END)) AS `61To70`,
  SUM((CASE temperature WHEN temperature BETWEEN 71 AND 80 THEN SumOfTotalPrice ELSE 0 END)) AS `71To80`,
  SUM((CASE temperature WHEN temperature BETWEEN 81 AND 90 THEN SumOfTotalPrice ELSE 0 END)) AS `81To90`,
  SUM((CASE temperature WHEN temperature > 90              THEN SumOfTotalPrice ELSE 0 END)) AS `Over90`
FROM `reconciled`.totalsalesbystoreandtemperature 
GROUP BY storenumber

这是查询的结果: Query Results

以下是基础记录集的内容: Underlying Table

1 个答案:

答案 0 :(得分:2)

您需要将所有CASE WHEN ...部分更改为CASE temperature WHEN temperature BETWEEN 31 AND 40 THEN ,如下所示:

CASE WHEN temperature BETWEEN 31 AND 40 THEN

更改为

CASE

当前,temperature试图将WHEN列与false语句中给出的逻辑测试结果进行比较。由于这些类型不同,因此您不断得到0和{{1}}的结果。

相关问题