COUNT(DISTINCT 列名)用于统计非空唯一值的数量,如SELECT COUNT(DISTINCT city) FROM users返回不重复城市数;NULL值被自动忽略,多列去重需用子查询实现,大数据量时建议建索引或使用近似函数优化性能。

在使用 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 不参与计数,只统计不同的非空邮箱数量。
AppMall应用商店
AI应用商店,提供即时交付、按需付费的人工智能应用服务
56 查看详情
多列去重怎么办?
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 怎么用才正确?的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/588083.html
微信扫一扫
支付宝扫一扫