如何在SQL中将列中不同字段分组归类并汇总列值?
单条SQL实现OS分类汇总点击量
要完成这个分类汇总的需求,咱们可以用CASE语句对操作系统进行分组映射,再结合SUM()聚合函数和GROUP BY来统计总点击量,具体SQL代码如下:
SELECT CASE WHEN os IN ('iOS', 'Android') THEN 'phone' WHEN os IN ('Windows', 'Ubuntu') THEN 'computer' END AS os, SUM(clicks) AS clicks FROM your_table_name -- 记得把这里替换成你的实际表名 GROUP BY CASE WHEN os IN ('iOS', 'Android') THEN 'phone' WHEN os IN ('Windows', 'Ubuntu') THEN 'computer' END;
代码说明:
CASE语句:负责把原表中的os值映射成你需要的两类——phone(包含iOS、Android)和computer(包含Windows、Ubuntu),并将这个新的分类字段命名为osSUM(clicks):对每个分类下的所有clicks值求和,得到该类的总点击量GROUP BY:按照我们通过CASE生成的分类结果进行分组,这样才能确保每个分类只返回一条汇总记录
如果你的数据库支持在GROUP BY中使用SELECT子句的别名(比如MySQL 5.7及以上、PostgreSQL、SQL Server等),还可以简化GROUP BY部分,让代码更简洁:
SELECT CASE WHEN os IN ('iOS', 'Android') THEN 'phone' WHEN os IN ('Windows', 'Ubuntu') THEN 'computer' END AS os, SUM(clicks) AS clicks FROM your_table_name GROUP BY os;
这种写法更清爽,但要注意部分老版本数据库可能不支持这个特性,这时候用第一种写法就稳啦。
内容的提问来源于stack exchange,提问作者Antonio




