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

SQL按指定列分组统计多列空值数量的实现方法咨询

解法说明

  • 你提到的转长表再统计的思路是完全可行的,列数较多时可以采用该方案配合PIVOT实现需求,但列数较少时有更简单的实现方式,不需要做转置操作。

最简实现:条件聚合(适配所有SQL版本)

直接在聚合函数里加判断条件即可,不需要修改表结构,性能最优:

SELECT 
  A,
  SUM(CASE WHEN B = '' THEN 1 ELSE 0 END) AS B,
  SUM(CASE WHEN C = '' THEN 1 ELSE 0 END) AS C
FROM `table1`
GROUP BY A

注:如果你的空值是SQL标准NULL而非空字符串,将判断条件替换为B IS NULL、C IS NULL即可。

转长表+PIVOT的实现方案(适合统计列数较多的场景)

如果你需要统计的列很多,不想重复写CASE WHEN语句,可以采用你提到的思路,先UNPIVOT转成长表,再统计后PIVOT转回宽表,以MySQL 8.0+为例示例代码如下:

SELECT * 
FROM (
  -- 按分组统计各列空值数
  SELECT A, col_name, COUNT(*) AS empty_cnt
  FROM (
    --  unpivot转长表
    SELECT A, col_name, col_value
    FROM `table1`
    UNPIVOT (
      col_value FOR col_name IN (B, C) -- 此处填写所有要统计的列名
    ) AS unpvt
  ) t
  WHERE col_value = '' -- 空值为NULL时替换为col_value IS NULL
  GROUP BY A, col_name
) t
PIVOT (
  MAX(empty_cnt) FOR col_name IN (B, C) -- 此处填写所有要统计的列名
) AS pvt

内容的提问来源于stack exchange,提问作者J. G.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 21:24:05