MS SQL Server 2005统计Subkey-Category组合频次求助
问题解决:按Subkey与Category组合统计出现次数
原SQL的问题
你的SQL存在两处冗余且影响逻辑的问题:
- 多余的
DISTINCT:GROUP BY Category, Subkey已经会自动按组合去重,额外添加DISTINCT完全没必要 - 不必要的
CASE判断:分组后每个组内的Category值是唯一的,你写的CASE逻辑等价于直接统计1,属于多此一举的写法
正确的SQL语句
针对MS SQL Server 2005,直接用COUNT(*)统计每个分组的行数即可,这是最简洁高效的写法:
SELECT Subkey, Category, COUNT(*) AS Frequency FROM Table1 GROUP BY Subkey, Category ORDER BY Subkey, Category; -- 可选,让结果与期望输出顺序一致
逻辑说明
GROUP BY Subkey, Category:将数据按Subkey和Category的唯一组合进行分组COUNT(*):统计每个分组内的记录条数,也就是该组合的出现次数- 可选的
ORDER BY:如果需要结果和你给出的期望输出顺序完全匹配,可以加上,不影响核心统计结果
执行这条SQL后,会得到你期望的输出:
| Subkey | Category | Frequency |
|---|---|---|
| AA | apple | 3 |
| AA | banana | 1 |
| BB | apple | 1 |
| BB | grapes | 2 |
| CC | banana | 2 |
内容的提问来源于stack exchange,提问作者Joe
相关产品推荐
相关产品推荐

