如何用COUNT(DISTINCT var)按分组统计唯一值数量?
T-SQL按分组统计唯一值数量的实现方法
你给出的代码在T-SQL中完全可用,能实现按分组统计唯一值数量的需求,只需补充FROM子句指定数据源即可。完整语句如下:
SELECT col1 AS letters, COUNT(DISTINCT col2) AS numbers FROM your_table -- 替换为你的实际表名 GROUP BY col1;
将其应用到你的测试数据:
| col1 | col2 |
|---|---|
| a | 5 |
| a | 5 |
| a | 6 |
| b | 1 |
| b | 2 |
| b | 6 |
执行后会得到你预期的结果:
| letters | numbers |
|---|---|
| a | 2 |
| b | 3 |
如果遇到特殊场景(比如复杂嵌套查询、多字段组合去重等)导致COUNT(DISTINCT)无法适配,也可以通过子查询先去重再统计,代码示例:
SELECT col1 AS letters, COUNT(*) AS numbers FROM ( -- 先对每组的col2去重 SELECT DISTINCT col1, col2 FROM your_table ) AS distinct_subquery GROUP BY col1;
这段代码先通过子查询提取每个col1分组下的唯一col2值,再统计分组内的记录数,最终结果和直接使用COUNT(DISTINCT)一致。
内容的提问来源于stack exchange,提问作者Jaigus
相关产品推荐
相关产品推荐

