SQL 条件聚合 使用方法总结 SQL 条件聚合 使用方法总结核心聚合函数 条件判断分组内按条件统计不同维度数据一、核心语法-- 基础格式聚合函数(CASEWHEN条件THEN字段END)别名常用聚合SUM/COUNT/AVG/MAX/MIN二、常用场景示例1. 条件求和 SUM按条件累加指定数据-- 统计男、女各自薪资总和SELECTSUM(CASEWHENgender男THENsalaryEND)ASman_sal,SUM(CASEWHENgender女THENsalaryEND)ASwoman_salFROMstaff;2. 条件计数 COUNT统计符合条件的记录数-- 统计及格、不及格人数SELECTCOUNT(CASEWHENscore60THEN1END)ASpass_num,COUNT(CASEWHENscore60THEN1END)ASfail_numFROMexam;3. 条件平均值 AVG只计算满足条件数据的均值-- 计算正式员工平均工资SELECTAVG(CASEWHENstatus1THENsalaryEND)FROMstaff;4. 搭配 GROUP BY 分组条件聚合分组后再细分条件统计-- 按部门分组统计部门男女人数SELECTdept,COUNT(CASEWHENgender男THEN1END)ASman_cnt,COUNT(CASEWHENgender女THEN1END)ASwoman_cntFROMstaffGROUPBYdept;三、简写兼容写法MySQL专属IF替代CASE写法更简短SUM(IF(score60,score,0))COUNT(IF(gender男,1,NULL))空值特性不满足条件返回NULL聚合自动忽略四、关键规则满足条件取字段值不满足默认返回NULL聚合自动过滤空值适合一行多指标统计替代多次子查询性能更高可多层条件嵌套实现区间分级统计可和GROUP BY、HAVING组合使用五、区间统计实战-- 统计不同分数段人数SELECTCOUNT(CASEWHENscore60THEN1END)ASlow,COUNT(CASEWHENscoreBETWEEN60AND80THEN1END)ASmid,COUNT(CASEWHENscore80THEN1END)AShighFROMexam;六、速记口诀条件套进聚合里CASE判断分数据一行算出多维度分组统计超便捷Leetcode 经典例题每月交易表TransactionsColumn NameTypeidintcountryvarcharstateenumamountinttrans_datedateid 是这个表的主键。该表包含有关传入事务的信息。state 列类型为 [“approved”, “declined”] 之一。编写一个 sql 查询来查找每个月和每个国家/地区的事务数及其总金额、已批准的事务数及其总金额。以 任意顺序 返回结果表。查询结果格式如下所示。示例 1:输入Transactions table:idcountrystateamounttrans_date121USapproved10002018-12-18122USdeclined20002018-12-19123USapproved20002019-01-01124DEapproved20002019-01-07输出monthcountrytrans_countapproved_counttrans_total_amountapproved_total_amount2018-12US21300010002019-01US11200020002019-01DE1120002000SELECTDATE_FORMAT(trans_date,%Y-%m)ASmonth,country,COUNT(*)AStrans_count,SUM(amount)AStrans_total_amount,SUM(CASEWHENstateapprovedTHEN1ELSE0END)ASapproved_count,SUM(CASEWHENstateapprovedTHENamountELSE0END)ASapproved_total_amountFROMTransactionsGROUPBYDATE_FORMAT(trans_date,%Y-%m),country;