buguge - Keep it simple,stupid

知识就是力量,但更重要的,是运用知识的能力why buguge?

导航

SQL知多少?利用group by配合case when来对数据做区间汇总

如下是产品经理的一个提数需求。

 

 

要求计算出来不同收入区间里的人数、总金额。

怎么实现?

group by是少不了的。不过,总不能每个区间都去执行一次包含group by的select语句吧,那多耽误工夫啊。教你一招,拿走不谢!

 

group by配合case when,也许你不晓得有多爽!

 

简化一下场景,例如,下面表格左边是原始数据,右边是基于原始数据的统计结果。

原始数据 →→→ 统计结果

user   amt
-------- --------
ZhangSan 10
Molly    15
Biden    21
Hack    16

→→→

amtRange userCount totalAmt
--------   ---------    ----------
1X      3        41
2X      1        21

 下面sql,拿走不谢。

SELECT  CASE WHEN amt>=10 AND amt<20 THEN '1X' WHEN amt>=20 AND amt<30 THEN '2X' ELSE 0 END AS 'amtRange'
    , COUNT(1) AS 'userCount', SUM(amt) AS 'totalAmt'
FROM(
    SELECT 'ZhangSan' AS USER,10  AS amt
    UNION ALL 
    SELECT 'Molly',15 
    UNION ALL 
    SELECT 'Biden',21
    UNION ALL 
    SELECT 'Hack',16
) a
GROUP BY CASE WHEN amt>=10 AND amt<20 THEN '1X' WHEN amt>=20 AND amt<30 THEN '2X' ELSE 0 END

 

posted on 2021-12-15 22:41  buguge  阅读(796)  评论(0编辑  收藏  举报