SQL统计分组内的所有数据唯一值_使用DISTINCT汇总

COUNT(DISTINCT)在GROUP BY中统计每组唯一值个数,新版主流数据库支持,老版MySQL需用子查询去重后计数;多字段DISTINCT统计组合唯一性,非分别去重;性能差时宜用近似函数或预汇总。GROUP BY 后想统计每组里 DISTINCT 值个数,别直接套 COUNT(DISTINCT ...)MySQL 5.7+、PostgreSQL、SQL Server 2017+ 和 Oracle 都支持 COUNT(DISTINCT column) 在聚合查询中直接使用,但老版本 MySQL(如 5.6)不支持,会报错 ERROR 1111 (HY000): Invalid use of group function。不是语法写错了,是引擎限制。实操建议:先确认你的数据库版本:SELECT VERSION();,再决定能否用 COUNT(DISTINCT ...)如果不能用,得绕路:对分组字段和目标字段做联合去重,再外层计数,比如:SELECT group_col, COUNT(*) AS distinct_cntFROM (SELECT DISTINCT group_col, target_col FROM tbl) tGROUP BY group_col;注意子查询里必须包含所有 GROUP BY 字段,否则外层 GROUP BY 会出错或结果不准想列出每组的所有唯一值(不止个数),STRING_AGG 或 GROUP_CONCAT 更合适单纯统计数量只是第一步;很多时候你需要看到具体有哪些值------比如"每个部门有哪些职级""每类商品用了哪些标签"。这时 COUNT(DISTINCT ...) 就不够用了。实操建议:PostgreSQL 用 STRING_AGG(DISTINCT col, ', '),DISTINCT 关键字必须紧贴字段名,不能写成 STRING_AGG(col, ', ') DISTINCTMySQL 用 GROUP_CONCAT(DISTINCT col SEPARATOR ', '),注意默认长度限制是 1024,超长会被截断,需提前设 SET SESSION group_concat_max_len = 1000000;SQLite 没有原生 DISTINCT 支持,得用子查询先去重再拼接:GROUP_CONCAT(val) FROM (SELECT DISTINCT group_id, val FROM t)DISTINCT 在多字段组合统计时,行为容易被误解写 COUNT(DISTINCT a, b) 看似是"统计 a 和 b 的组合唯一数",但实际就是统计 (a,b) 这一对值的去重数量。不是分别对 a 和 b 去重再相加,也不是取并集。 跃问 跃问是由阶跃星辰开发的免费AI智能问答助手,随时帮你智能搜索、高效阅读、识图理解、和你畅聊感兴趣的话题。

相关推荐
笨鸟先飞,勤能补拙2 小时前
AI 赋能网络安全:技术全景、成熟度评估与实战案例
人工智能·python·安全·web安全·网络安全·sqlite·github
天桥下的卖艺者2 小时前
使用scitable包,两步生成逆概率删失权重(IPCW)
数据库·r语言
隔窗听雨眠2 小时前
AI原生数据库浪潮:国产数据库的架构重构与路径之争
数据库
长和信泰光伏储能2 小时前
京津冀光伏发电:绿色能源的未来之路
python·能源
数据库小学妹2 小时前
数据库选型实战:从数据类型到TCO成本,五维决策框架+九款产品横评
数据库·信创·国产数据库·数据库选型·oracle迁移
浦信仿真大讲堂3 小时前
从重复操作到自动化闭环:如何让 CST 与 Python 真正协同起来
python·自动化·cst·仿真软件·达索软件
Gu Gu Study3 小时前
ScoutLoop开放域深度研究引擎(agent的初步设计想法)
人工智能·python
神龙天舞20013 小时前
MySQL 备库为什么会延迟好几个小时
android·数据库·mysql
卷无止境4 小时前
写代码这件事,到底该讲究点什么?
后端·python
卷无止境4 小时前
循环复杂度到底在算什么,Python 代码怎么才能写得让人一看就懂
后端·python