分组条件统计思路:聚合函数+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函数实现统计,用公式来做条件判断,这样我们就可以很简单的实现复杂条件的数据筛选了。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· winform 绘制太阳,地球,月球 运作规律
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 上周热点回顾(3.3-3.9)