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无代码市场,只需一个提示快速构建应用程序
相关推荐
秋风渡.1 分钟前
MySQL_数据类型知识Season45034 分钟前
Redis命令 (generic即通用命令)小猴子爱上树1 小时前
一站式解决图片视频翻译难题的高效AI工具weixin_538601971 小时前
智能体测开Day31lbb 小魔仙1 小时前
Git + Python 项目工作流最佳实践:pre-commit、CI、CHANGELOG 自动化liwulin05061 小时前
【ollama】自定义结构化输出dyxal1 小时前
最长公共子序列(LCS)木易士心2 小时前
MyBatis数据源切换全面解析你驴我2 小时前
WhatsApp Cloud API 速率限制下的令牌桶与退避策略实践AC赳赳老秦2 小时前
司法公开数据采集应用:OpenClaw 抓取裁判文书公开信息,批量整理同类参考案例