问个关于case when的简单有关问题
问个关于case when的简单问题
例如我现在需要对分数段来统计,每10分一个分数段,有表如下
名字 分数
张三 76
李四 75
王五 64
用case when来统计人数的话,结果是
分数 人数
60-69 1
70-79 2
而我需要的效果是
分数 人数
0-9 0
10-19 0
.
.
.
60-69 1
70-79 2
.
.
90-99 0
这只是我简化了的例子,实际的是以当前时间为准,每X秒(X=5秒,10秒...)向前推,作为一个时间段来分组统计.
------解决方案--------------------
例如我现在需要对分数段来统计,每10分一个分数段,有表如下
名字 分数
张三 76
李四 75
王五 64
用case when来统计人数的话,结果是
分数 人数
60-69 1
70-79 2
而我需要的效果是
分数 人数
0-9 0
10-19 0
.
.
.
60-69 1
70-79 2
.
.
90-99 0
这只是我简化了的例子,实际的是以当前时间为准,每X秒(X=5秒,10秒...)向前推,作为一个时间段来分组统计.
------解决方案--------------------
- SQL code
SELECT '0-9' "分数", SUM((CASE WHEN 分数>=0 AND 分数<=9 THEN 1 ELSE 0 END))"人数" FROM t_name UNION SELECT '10-19' "分数", SUM((CASE WHEN 分数>=10 AND 分数<=19 THEN 1 ELSE 0 END))"人数" FROM t_name UNION SELECT '20-29' "分数", SUM((CASE WHEN 分数>=20 AND 分数<=29 THEN 1 ELSE 0 END))"人数" FROM t_name UNION SELECT '30-39' "分数", SUM((CASE WHEN 分数>=30 AND 分数<=39 THEN 1 ELSE 0 END))"人数" FROM t_name UNION SELECT '40-49' "分数", SUM((CASE WHEN 分数>=40 AND 分数<=49 THEN 1 ELSE 0 END))"人数" FROM t_name UNION SELECT '50-59' "分数", SUM((CASE WHEN 分数>=50 AND 分数<=59 THEN 1 ELSE 0 END))"人数" FROM t_name UNION SELECT '60-69' "分数", SUM((CASE WHEN 分数>=60 AND 分数<=69 THEN 1 ELSE 0 END))"人数" FROM t_name UNION SELECT '70-79' "分数", SUM((CASE WHEN 分数>=70 AND 分数<=79 THEN 1 ELSE 0 END))"人数" FROM t_name UNION SELECT '80-89' "分数", SUM((CASE WHEN 分数>=80 AND 分数<=89 THEN 1 ELSE 0 END))"人数" FROM t_name UNION SELECT '90-99' "分数", SUM((CASE WHEN 分数>=90 AND 分数<=99 THEN 1 ELSE 0 END))"人数" FROM t_name UNION SELECT '100' "分数", SUM((CASE WHEN 分数=100 THEN 1 ELSE 0 END))"人数" FROM t_name
------解决方案--------------------
- SQL code
select '...到...' 分数,sum(case when 分数>... and 分数<... then 1 else 0 end) 人数 from tb union all '...到...' 分数,sum(case when 分数>... and 分数<... then 1 else 0 end) 人数 from tb union all ... union all '...到...' 分数,sum(case when 分数>... and 分数<... then 1 else 0 end) 人数 from tb