如何编写SQL查询实现用户各产品购买次数的行转列统计
行转列统计用户各产品购买量
你的需求完全可以实现,这是SQL里常见的**行转列(Pivot)**场景,下面直接给你可行的查询方案:
原表结构(翻译后)
表名:Farm 用户ID | 产品名称 1 苹果 1 橙子 1 苹果 2 葡萄 2 葡萄 3 苹果 4 橙子 3 葡萄 2 苹果
期望结果(翻译后)
用户ID | 苹果 | 葡萄 | 橙子 1 2 0 1 2 1 2 0 3 1 1 0 4 0 0 1
实现SQL(适配绝大多数数据库)
SELECT `User` AS 用户ID, COUNT(CASE WHEN Product = 'Apple' THEN 1 END) AS 苹果, COUNT(CASE WHEN Product = 'Grape' THEN 1 END) AS 葡萄, COUNT(CASE WHEN Product = 'Orange' THEN 1 END) AS 橙子 FROM Farm GROUP BY `User` ORDER BY `User`;
关键逻辑说明:
GROUP BY User按用户分组,把同一个用户的所有购买记录聚合到一起CASE WHEN对每条记录判断产品类型,匹配时返回1,不匹配时返回NULL;COUNT函数会忽略NULL值,最终得到该用户对应产品的购买次数- 未购买的产品因无匹配记录,
COUNT结果自然为0,符合需求
另外,你之前写的CTE(公共表表达式)是多余的,无需额外嵌套,直接从Farm表查询分组即可。
内容的提问来源于stack exchange,提问作者James Park
相关产品推荐
相关产品推荐

