单表多列组合的COUNT统计查询实现方案咨询
看起来你在统计分组内多列的唯一值数量时遇到了语法和逻辑问题,我来帮你梳理下最简的实现方式:
首先,你的核心需求是按Column1(别名Name)分组,分别统计:
- 每组内不同
Column2的数量(C2Count) - 每组内不同
Column3的数量(C3Count) - 每组内
Column4+Column5组合的唯一数量(C4Count)
最简SQL实现(针对SQL Server,因为你用了#Temp临时表)
SELECT Column1 AS Name, COUNT(DISTINCT Column2) AS C2Count, COUNT(DISTINCT Column3) AS C3Count, COUNT(DISTINCT CONCAT(Column4, '|', Column5)) AS C4Count FROM #Temp GROUP BY Column1
为什么你的原查询有问题?
COUNT(DISTINCT Column1,Column2)语法错误:SQL Server不支持在COUNT(DISTINCT)中传入多列。不过因为我们已经按Column1分组了,每组内的Column1值是固定的,所以统计Column2的唯一值数量,就等价于统计(Column1,Column2)组合的唯一数量,直接用COUNT(DISTINCT Column2)更简洁。COUNT(Column1,Column4,Column5)语法完全错误:COUNT()只能接受单个参数。要统计多列组合的唯一性,需要把它们拼接成一个不会产生歧义的字符串(用|这类分隔符避免不同列值拼接后撞车,比如Column4='12' + Column5='34'和Column4='1' + Column5='234'会被区分开),再用DISTINCT统计。
结果验证
运行上面的语句后,会得到你期望的结果:
| Name | C2Count | C3Count | C4Count |
|---|---|---|---|
| AAA | 2 | 2 | 3 |
| BBB | 1 | 1 | 1 |
如果是MySQL等支持多列DISTINCT的数据库,C4Count可以简化为COUNT(DISTINCT Column4, Column5),写法更直观,但上面的拼接方式在各种SQL方言中都通用。
内容的提问来源于stack exchange,提问作者Tech Learner
相关产品推荐
相关产品推荐

