You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

是否存在单条SQL查询语句实现按列统计唯一值数量?

单条SQL语句统计各列唯一值数量

当然可以用单条SQL语句实现,核心是利用COUNT(DISTINCT)聚合函数,同时根据你对空值/空字符串的处理需求调整逻辑。

基础实现(排除NULL)

COUNT(DISTINCT 列名)会自动忽略NULL值,统计列中非NULL的唯一值数量,这是最常用的方式:

SELECT
  COUNT(DISTINCT Col1) AS col1_unique_count,
  COUNT(DISTINCT Col2) AS col2_unique_count_exclude_null,
  COUNT(DISTINCT Col3) AS col3_unique_count
FROM your_table;

针对你的数据表,执行结果为:

  • col1_unique_count: 2(值a、b)
  • col2_unique_count_exclude_null: 3(值1、2、3,NULL被排除)
  • col3_unique_count: 4(值Z、empty、X、Y)

包含NULL的统计

如果需要把NULL视为一个独立的唯一值,可以用COALESCE将NULL替换为一个唯一占位符,让DISTINCT识别它:

SELECT
  COUNT(DISTINCT Col1) AS col1_unique_count,
  COUNT(DISTINCT COALESCE(Col2, '___NULL___')) AS col2_unique_count_include_null,
  COUNT(DISTINCT Col3) AS col3_unique_count
FROM your_table;

此时col2_unique_count_include_null会返回4(包含NULL)。

自定义空字符串处理

如果需要排除特定的空字符串(比如示例中的empty),可以用CASE语句过滤:

SELECT
  COUNT(DISTINCT Col1) AS col1_unique_count,
  COUNT(DISTINCT Col2) AS col2_unique_count_exclude_null,
  COUNT(DISTINCT CASE WHEN Col3 != 'empty' THEN Col3 END) AS col3_unique_count_exclude_empty
FROM your_table;

这里col3_unique_count_exclude_empty会返回3(排除empty后的值:Z、X、Y)。

为什么分组子句不对?

你尝试的分组(GROUP BY)是按行维度分组聚合,而我们需要的是对整个列的全局聚合,因此不需要GROUP BY,直接在SELECT中使用聚合函数即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 01:08:11