COUNT DISTINCT是SQL中用于统计去重后记录数量的聚合函数组合,核心作用是在统计时排除重复值,得到唯一值的数量,在数据统计类查询中应用非常广泛。

基础语法
COUNT DISTINCT的基础语法格式如下:
-- 统计指定字段去重后的数量 SELECT COUNT(DISTINCT column_name) FROM table_name; -- 可以结合WHERE条件使用 SELECT COUNT(DISTINCT column_name) FROM table_name WHERE condition;
其中column_name是要去重统计的字段名,table_name是数据表名,condition是可选的查询过滤条件。
常见使用场景
单字段去重统计
最常见的场景是统计某个字段的唯一值数量,比如统计用户表中总共有多少个不同的城市:
-- 假设用户表名为user_info,城市字段为city SELECT COUNT(DISTINCT city) AS unique_city_count FROM user_info;
上述查询会返回user_info表中所有不重复的城市数量,结果会被命名为unique_city_count。
结合条件过滤使用
如果需要统计符合特定条件的去重数量,可以添加WHERE子句,比如统计2024年注册的用户中不同的城市数量:
-- 假设注册时间字段为register_time SELECT COUNT(DISTINCT city) AS unique_city_count FROM user_info WHERE register_time >= '2024-01-01' AND register_time < '2025-01-01';
多字段去重统计
部分数据库支持直接对多个字段使用COUNT DISTINCT,统计多个字段组合后的唯一值数量,比如统计不同的城市和年龄段组合的数量:
-- 假设年龄段字段为age_group SELECT COUNT(DISTINCT city, age_group) AS unique_combine_count FROM user_info;
如果数据库不支持多字段直接写在DISTINCT后,可以通过拼接字段的方式实现:
-- 使用CONCAT拼接两个字段,再统计去重数量 SELECT COUNT(DISTINCT CONCAT(city, '_', age_group)) AS unique_combine_count FROM user_info;
注意事项
- NULL值处理:COUNT DISTINCT会忽略字段值为NULL的记录,不会将NULL计入统计结果。如果需要统计NULL的数量,需要单独处理。
- 和COUNT的区别:COUNT(column_name)会统计该字段所有非NULL的记录数,包含重复值;而COUNT(DISTINCT column_name)只统计去重后的非NULL值数量。
- 性能问题:COUNT DISTINCT需要对数据进行去重操作,在数据量较大的情况下性能会比普通COUNT低,如果频繁使用可以考虑提前对字段建立索引优化。
实际业务案例
假设有一张订单表order_info,包含字段order_id(订单ID)、user_id(用户ID)、product_id(商品ID)、order_date(订单日期),现在需要统计2024年每个用户购买的不同商品数量:
SELECT user_id, COUNT(DISTINCT product_id) AS unique_product_count FROM order_info WHERE order_date >= '2024-01-01' AND order_date < '2025-01-01' GROUP BY user_id;
上述查询会按照用户ID分组,统计每个用户在2024年购买的不重复商品数量,结果中unique_product_count就是每个用户购买的不同商品数。
SQLCOUNT_DISTINCT去重统计聚合函数数据库查询修改时间:2026-07-09 17:09:18