
在使用 SQL 的 COUNT(DISTINCT column_name) 时,核心是统计某一列中非重复值的个数。它常用于去重计数,比如统计不同用户、不同地区或不同类别的数量。
基本语法和作用COUNT(DISTINCT 列名) 只会计算该列中唯一且非 NULL 的值出现的次数。例如:
SELECT COUNT(DISTINCT city) FROM users;这句查询会返回 users 表中不重复的城市数量。如果 city 列有 "北京"、"上海"、"北京"、"广州",结果就是 3。
注意 NULL 值的影响DISTINCT 会自动忽略 NULL 值。也就是说,即使某列有很多 NULL,它们不会被计入去重结果中。例如:
SELECT COUNT(DISTINCT email) FROM users;如果 email 列中有重复邮箱还有多个 NULL,NULL 不参与计数,只统计不同的非空邮箱数量。
Teleporthq
一体化AI网站生成器,能够快速设计和部署静态网站
182
查看详情
多列去重怎么办?
SQL 标准不支持直接写 COUNT(DISTINCT col1, col2)(MySQL 支持,但其他数据库如 PostgreSQL、Oracle 不行)。正确做法是使用子查询:
SELECT COUNT(*) FROM (SELECT DISTINCT department, role FROM employees
) AS unique_combinations;
先用 DISTINCT 找出两列组合的唯一行,再对外层计数。这是跨数据库通用的写法。
性能优化建议当数据量大时,COUNT(DISTINCT) 可能变慢,因为需要排序或哈希去重。可以考虑:
- 确保被统计的列有索引(尤其是单列场景)
- 避免在大表上频繁执行高基数(high cardinality)的去重计数
- 必要时用近似函数,如 Hive 中的 APPROX_COUNT_DISTINCT
基本上就这些。只要理解它只算“非空且唯一”的值,并掌握多列处理方式,就能正确使用。实际写的时候先测试小数据,确认逻辑无误再上线。
以上就是SQL COUNT DISTINCT 怎么用才正确?的详细内容,更多请关注知识资源分享宝库其它相关文章!
相关标签: mysql oracle 大数据 app ai 邮箱 上海 sql mysql NULL count select oracle hive postgresql 数据库 性能优化 大家都在看: 如何建立MySQL远程数据源_MySQL远程连接数据源配置方法 MySQL插入中文数据乱码怎么办_MySQL中文数据插入编码处理 MySQL数据源故障怎么排查_MySQL数据源常见问题解决方法 如何监控MySQL数据源状态_MySQL数据源连接状态监控方法 如何配置MySQL连接池数据源_MySQL连接池数据源设置详解






发表评论:
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。