COUNT(DISTINCT 列名) 用于统计指定列中非空不重复值的数量,NULL 值不计入,常用于去重计数,如统计唯一用户数;支持单列和多字段组合去重(需拼接或特定语法);与 COUNT(*)(统计所有行)、COUNT(列)(统计非空行)不同,其性能在大数据量时较低,建议通过索引和 WHERE 条件优化。

COUNT(DISTINCT) 是 SQL 中用来统计某个字段中不重复值数量的聚合函数。它常用于去重计数,比如统计用户、类别、地区等唯一值的个数。
基本语法
COUNT(DISTINCT 列名) 会返回指定列中不同非空值的数量。
注意:NULL 值不会被计入结果。
例如,有一张订单表 orders,包含字段:order_id, customer_id, product。
想统计有多少个不同的客户下过单:SELECT COUNT(DISTINCT customer_id) AS unique_customers
FROM orders;
多个字段去重计数
如果要统计多个字段组合下的唯一记录数,也可以使用 COUNT(DISTINCT) 配合拼接(视数据库支持情况)。
比如统计不同“客户-产品”组合的数量:– 在支持 CONCAT 的数据库中(如 MySQL)
SELECT COUNT(DISTINCT CONCAT(customer_id, ‘-‘, product)) AS unique_combinations
FROM orders;
注意:不是所有数据库都支持在 DISTINCT 中直接用多个字段,但可以用其他方式实现,比如子查询或 GROUP BY。
GitHub Copilot
GitHub AI编程工具,实时编程建议
387 查看详情
与 COUNT(*) 和 COUNT(列) 的区别
COUNT(*):统计所有行数,包括 NULL 值所在行COUNT(列):统计该列非 NULL 的行数COUNT(DISTINCT 列):统计该列中非 NULL 的不同值数量
举个例子:
AliceBobAliceNULL
SELECT
COUNT(*) AS total_rows,
COUNT(name) AS non_null_names,
COUNT(DISTINCT name) AS unique_names
FROM table;
结果是:
total_rows: 4non_null_names: 3unique_names: 2
性能注意事项
COUNT(DISTINCT) 在大数据量时可能较慢,因为它需要排序或哈希去重。
建议:确保相关字段有索引,虽然索引对 COUNT(DISTINCT) 效果有限,但有助于过滤数据尽量先通过 WHERE 减少数据集某些场景可用近似函数替代,如 HyperLogLog(如 Presto 中的 APPROX_DISTINCT)
基本上就这些。用法不复杂,但要注意 NULL 值和性能影响。
以上就是SQL 查询中 COUNT DISTINCT 怎么用?的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/911085.html
微信扫一扫
支付宝扫一扫