1. 程式人生 > 實用技巧 >mysql leetcode 1435. 製作會話柱狀圖 解題思路 一步一步來

mysql leetcode 1435. 製作會話柱狀圖 解題思路 一步一步來

看完題目後,我一般先看結果的樣子
從結果可以看出,是按照成績自定義分組
自定義分組用到 group by case when
所以先得出

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 as bin,
count(1) as total
from `Sessions`
group by bin

得出的結果跟答案不一樣
因為對於不在判斷條件內的值是不會產生記錄的
比如答案中的 [10-15> | 0

所以這一步我們只確保了不為0的分類

分類是固定的,按照題目所給的定義
我們可以先生成左邊 bin 的一列
通過 自定義值+union連線

select '[0-5>' as bin union
select '[5-10>' as bin union
select '[10-15>' as bin union
select '15 or more' as bin

得出這一部分後,將兩部分拼接起來,使用左連線
使用ifnull判斷為空的 total項,並將其設為0

select
s1.bin as bin,
ifnull(s2.total, 0) as total
from
(
    select
'[0-5>' as bin union select '[5-10>' as bin union select '[10-15>' as bin union select '15 or more' as bin ) as s1 left join ( 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 as bin, count(1) as total from `Sessions` group by bin ) as s2 on s1.bin = s2.bin