题解 | #计算25岁以上和以下的用户数量#
计算25岁以上和以下的用户数量
https://www.nowcoder.com/practice/30f9f470390a4a8a8dd3b8e1f8c7a9fa
CASE函数的使用
CASE 测试表达式 WHEN 简单表达式1 THEN 结果表达式1 WHEN 简单表达式2 THEN 结果表达式2 … WHEN 简单表达式n THEN 结果表达式n [ ELSE 结果表达式n+1 ] END AS 字段别名
方法1:CASE函数
select case when age < 25 or age is NULL then "25岁以下" when age >= 25 then "25岁及以上" end as age_cut, count(*) number from user_profile group by age_cut
SQL执行顺序中select明明在groupby后面,但是这里为什么能用别名age_cut。
原因:因为MySQL对查询做了增强没有严格遵循SQL的执行顺序,where后面不能用select中的别名,但是group by 是可以的,Oracle数据库严格遵循了SQL执行顺序在Oracle里group by是不能引用select里的别名的。Mysql执行顺序应该是 from,where,select,group by,having,order by,limit
方法2:IF函数(三目函数)
select if(age < 25 or age is NULL,"25岁以下","25岁及以上") as age_cut, count(*) number from user_profile group by age_cut