You need to enable JavaScript to run this app. 如何用SQL统计列中每个distinct值的出现次数
优惠活动
大模型
产品
解决方案
定价
更多

如何用SQL统计列中每个distinct值的出现次数

列值逐值计数的实现方法

要统计单列中每个distinct值的出现次数,核心逻辑是基于目标列做分组聚合。全局聚合查询如果没有分组逻辑,永远只会返回单行的全局统计值,无法拆分输出每个值的单独计数。

基础查询语句

SELECT 
  Col1,
  COUNT(Col1) AS occurrence_count
FROM table1
GROUP BY Col1;

语句执行逻辑:

  • GROUP BY Col1 会将表中Col1取值完全相同的行划归为同一个独立分组
  • 聚合函数会针对每个分组单独计算,最终每个Col1值对应输出一行结果,实现逐值计数的目标。

原有写法的问题说明

之前使用的 SELECT COUNT(DISTINCT(Col1)) FROM table1 属于无分组的全局聚合查询:整表会被当成一个独立分组,最终只会返回1行结果——也就是所有去重值的总个数。无论怎么调整SELECT后的参数,只要没有添加GROUP BY Col1的分组逻辑,查询都不会拆分输出每个值的单独计数。

匹配目标展示格式的写法

如果需要直接输出值: 出现次数格式的结果,可以在查询中拼接两个字段的内容,以MySQL为例的写法:

SELECT 
  CONCAT(Col1, ': ', COUNT(Col1)) AS 统计结果
FROM table1
GROUP BY Col1;

使用题目给出的Col1样例数据执行后,输出结果为:

AA: 3
AB: 1
AC: 2
AD: 1
AE: 1

和期望格式完全一致。

注意事项

  • 如果需要统计列中的NULL值计数,需要把COUNT(Col1)替换为COUNT(*):因为COUNT(字段名)会跳过字段值为NULL的行,而COUNT(*)会统计分组内所有行的总数,包含字段为NULL的情况
  • 该写法符合SQL标准,可在所有主流数据库中运行,在开启严格GROUP BY模式的执行环境中也不会触发语法错误

内容的提问来源于stack exchange,提问作者Mus

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.11.03 15:24:04