SQL如何统计分组内不重复值的数量_COUNT与DISTINCT结合应用

COUNT(DISTINCT column_name) 可统计每个分组中某字段的不同值个数,自动将NULL视为一个值;语法错误写法DISTINCT COUNT()不合法;大数据量时可建联合索引或使用近似函数优化。GROUP BY 后统计每个分组里某字段有多少个不同值直接用 COUNT(DISTINCT column_name) 就行,这是最常用也最直观的解法。它会在每个分组内部去重后再计数,不是全表去重。常见错误是写成 DISTINCT COUNT(column_name) ------ 这语法不合法,SQL 会报错 ERROR: syntax error at or near "COUNT"。使用场景比如:查每个部门有多少种不同的职级,或每个订单号对应多少个不重复的商品类目。COUNT(DISTINCT) 在 PostgreSQL、MySQL 5.7+、SQL Server 2017+、Oracle、SQLite3 中都支持MySQL 5.6 或更早版本不支持该语法,得用子查询模拟如果 column_name 允许 NULL,DISTINCT 会把所有 NULL 当作一个值处理(即多个 NULL 只算 1 次)遇到 NULL 值时 COUNT(DISTINCT) 怎么算COUNT(DISTINCT column_name) 默认忽略 NULL ------ 准确说是把所有 NULL 视为同一值,并计入去重结果中,但只要该分组里有至少一个 NULL,它就只贡献 1 次计数。如果你希望 NULL 完全不参与计数(即当某分组全是 NULL 时,结果为 0),得加条件过滤:SELECT dept_id, COUNT(DISTINCT CASE WHEN job_level IS NOT NULL THEN job_level END) AS distinct_levelsFROM employeesGROUP BY dept_id;注意这里不能写 COUNT(DISTINCT IF(job_level IS NOT NULL, job_level, NULL)),因为 MySQL 的 IF 返回 NULL 仍会被当作一个去重项;用 CASE 显式排除更可靠。 Felvin AI无代码市场,只需一个提示快速构建应用程序

相关推荐
wj3055853787 小时前
课程 9:模型测试记录与 Prompt 策略
linux·人工智能·python·comfyui
星寂樱易李7 小时前
iperf3 + Python-- 网络带宽、网速、网络稳定性
开发语言·网络·python
qingfeng154158 小时前
企业微信机器人开发:如何实现自动化与智能运营?
人工智能·python·机器人·自动化·企业微信
星星也在雾里8 小时前
PgBouncer 解决 PostgreSQL 连接数超限 + 可视化监控
数据库·postgresql
AI人工智能+电脑小能手9 小时前
【大白话说Java面试题 第65题】【JVM篇】第25题:谈谈对 OOM 的认识
java·开发语言·jvm
雨辰AI10 小时前
SpringBoot3 + 人大金仓读写分离 + 分库分表 + 集群高可用 全栈实战
java·数据库·mysql·政务
长城202410 小时前
关于MySql的ONLY_FULL_GROUP_BY问题
数据库·mysql·聚合列
常常有10 小时前
MySQL 底层执行原理:输入SQL语句到两阶段提交
数据库·sql·mysql
Mr. zhihao11 小时前
深入解析redis基本数据结构
数据结构·数据库·redis