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

DB2/LUW:如何获取分组小计与总计且总计标签不为NULL?

替换GROUPING SETS/ROLLUP总计行的NULL标签

你可以利用GROUPING()函数配合条件判断来实现,只需要一次表扫描就能完成,无需重复查询数据:

SELECT 
  CASE 
    WHEN GROUPING(GROUP_KEY_TYPE) = 1 THEN '{TOTAL}'
    ELSE GROUP_KEY_TYPE 
  END AS GROUP_KEY_TYPE,
  COUNT(*) AS group_count
FROM LIBRAT.GL_GROUPS
GROUP BY GROUPING SETS((GROUP_KEY_TYPE), ())
ORDER BY 
  GROUPING(GROUP_KEY_TYPE),
  GROUP_KEY_TYPE;

关键说明:

  • GROUPING(GROUP_KEY_TYPE)是专门识别ROLLUP/GROUPING SETS聚合行的函数:当该行是总计行(由()分组集生成)时返回1,普通分组行返回0。用它判断能精准区分总计行的NULL和分组字段本身的NULL值,避免误替换。
  • 排序时加入GROUPING(GROUP_KEY_TYPE),可以让总计行固定排在结果集最后(1的排序优先级高于0),解决原查询中NULL排在最前面的问题。
  • 整个查询只扫描一次LIBRAT.GL_GROUPS表,相比UNION ALL的两次扫描,在数据量较大时能显著提升性能。

如果你的分组字段GROUP_KEY_TYPE本身不会出现NULL值,也可以简化用COALESCE:

SELECT 
  COALESCE(GROUP_KEY_TYPE, '{TOTAL}') AS GROUP_KEY_TYPE,
  COUNT(*) AS group_count
FROM LIBRAT.GL_GROUPS
GROUP BY GROUPING SETS((GROUP_KEY_TYPE), ())
ORDER BY 
  CASE WHEN GROUP_KEY_TYPE IS NULL THEN 1 ELSE 0 END,
  GROUP_KEY_TYPE;

但优先推荐GROUPING()的写法,逻辑更严谨,适配所有场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 10:42:33