使用带条件的多重GROUP BY实现SQL行转列统计蔬菜各篮子存储量
实现方案
你需要的是行转列的统计效果,通过GROUP BY搭配条件聚合即可实现,兼容MySQL、PostgreSQL、SQL Server等绝大多数主流数据库。
参考SQL语句
SELECT vegetables, SUM(CASE WHEN basket = 'basketA' THEN amount ELSE NULL END) AS basketA, SUM(CASE WHEN basket = 'basketB' THEN amount ELSE NULL END) AS basketB, SUM(CASE WHEN basket = 'basketC' THEN amount ELSE NULL END) AS basketC, SUM(CASE WHEN basket = 'basketD' THEN amount ELSE NULL END) AS basketD, SUM(amount) AS total FROM 你的表名 GROUP BY vegetables;
如果希望无数据的位置显示0而不是空白,把语句中的ELSE NULL改成ELSE 0即可。
逻辑说明
- 首先按
vegetables字段分组,将同一种蔬菜的所有记录聚合到同一行 - 针对每个篮子列,通过
CASE WHEN判断当前记录所属的篮子,符合条件则取对应数量求和,否则返回空 - 最后直接对
amount求和得到该蔬菜的总数量
内容的提问来源于stack exchange,提问作者priyo
相关产品推荐
相关产品推荐

