有这样的查询:
SELECT
count(*) as Total,
SUM(CASE WHEN gender = 1 then 1 ELSE 0 END) Male,
SUM(CASE WHEN gender = 2 then 1 ELSE 0 END) Female,
SUM(CASE WHEN gender = 0 then 1 ELSE 0 END) Unknown,
CASE
WHEN age>2 AND age<15 THEN '2-15'
WHEN age>18 AND age<25 THEN '18-25'
END AS var
FROM
persons
WHERE
1=1
AND `date` > '2012-01-10'
AND `date` < '2013-01-07'
GROUP BY
CASE
WHEN age>2 AND age<15 THEN '2-15'
WHEN age>18 AND age<25 THEN '18-25'
END
结果是:
Total Male Female Unknown var
29 17 12 0 NULL
7 0 7 0 18-25
3 0 3 0 2-15
第一个问题:
为什么结果是 NULL ?如何才能只显示带有值的结果?
第二个问题:
mysql 在 2-15 之前用 18-25 对我的 var
列进行排序,可能是因为数字 1 先出现然后是数字 2 . 但关键是作为数字的顺序,2 在前,然后是 18。
干杯:)
最佳答案
第一个回答:
它为 NULL,因为它不满足该年龄的任何 CASE 条件。像这样向 WHERE 添加一个子句应该可以做到:
WHERE (age > 2 AND age < 15) OR (age > 18 AND age < 25)
第二个答案:
你是对的,它是按字符串排序的(因为它们就是这样)。只需通过执行 ORDER ASC
或 ORDER DESC
关于Mysql case when 和 order by issue,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14202326/