今天刷sql,一道题目
解答的时候用到case when,这样的写法
case
when duration/60<5 then '[0-5>'
when duration/60<10 then '[5-10>'
when duration/60<15 then '[10-15>'
else '15 or more'
end bin,
这种写法里面有个让人困惑的点,第一条包括<5的,第二条包括<10的,不会重复吗?
经查询,原来case when 的执行原则是:
Case函数只返回第一个符合条件的值,剩下的Case部分将会被自动忽略。
另外这道题目还存在一个问题,如果在某个区间内无值,则该区间不显示,为了解决这个问题需要右连接,结果如下:
select b.bin,ifnull(a.total,0) total
from
(select
case
when duration/60<5 then '[0-5>'
when duration/60<10 then '[5-10>'
when duration/60<15 then '[10-15>'
else '15 or more'
end bin,
count(*) total
from Sessions
group by bin
) a
right join
(select '[0-5>' bin union
select '[5-10>' bin union
select '[10-15>' bin union
select '15 or more' bin
) b
on a.bin=b.bin