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智能问答助手随时帮你智能搜索、高效阅读、识图理解、和你畅聊感兴趣的话题。