分组条件统计思路:聚合函数+case when

前言

最近有一个数据清洗的任务,其中需要分组条件统计某一个类别的数量后进行过滤,因为之前有看过类似场景的解决方案,后面决定使用聚合函数+case when来实现这个功能。

场景描述:

需要统计每个人有效手机的数量。我们很容易可以联想到,需要使用到group by 分组统计每个人的手机,但是怎么再加上限制条件“是否有效”呢?


这个时候可以考虑使用case when来解决,如果手机有效则为1,无效则为2

SELECT
    T.u_name,
CASE
    
    WHEN T.phone_status = 1 THEN
    0 ELSE 1 
    END AS useful_phonecount 
FROM
    `user_test` T 
GROUP BY
T.u_name;


这种解法有两个优点,第一是灵活性,不管有效字段是通过什么来进行记录的(比如有T表示有效、F表示无效),case when都可以灵活的转换为数字。第二点是量化将字段化作了可量化的数字,我们可以根据需求来制定满足条件的等式

如果说需求变成了,统计手机全有效的用户昵称,那么我们可以通过:有效手机数量=用户手机数量 这个等式。这个时候聚合函数Sum()就可以上场了

SELECT
    T.u_name
FROM
    `user_test` T 
GROUP BY
    T.u_name 
HAVING
    SUM(CASE WHEN T.phone_status = 1 THEN 0 ELSE 1 END ) = COUNT( T.u_phone )

case when将数据变为量化的数值,sum函数实现统计,用公式来做条件判断,这样我们就可以很简单的实现复杂条件的数据筛选了。

posted @   moutory  阅读(95)  评论(0编辑  收藏  举报  
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· winform 绘制太阳,地球,月球 运作规律
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示