SQL COUNT DISTINCT 怎么用才正确?

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

SQL COUNT DISTINCT 怎么用才正确?

在使用 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 不参与计数,只统计不同的非空邮箱数量。

SQL COUNT DISTINCT 怎么用才正确?

Writecream AI Content Detector

Writecream推出的AI内容检测工具

SQL COUNT DISTINCT 怎么用才正确?32

查看详情 SQL COUNT DISTINCT 怎么用才正确?

多列去重怎么办?

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

基本上就这些。只要理解它只算“非空且唯一”的值,并掌握多列处理方式,就能正确使用。实际写的时候先测试小数据,确认逻辑无误再上线。

mysql oracle 大数据 app ai 邮箱 上海 sql mysql NULL count select oracle hive postgresql 数据库 性能优化

上一篇
下一篇