首页 > 解决方案 > 带有 GROUP BY 的 SQL COUNT(*) 和带有总计数的最后一行

问题描述

我想COUNT(*)在一个组上使用,然后在最后再使用一行来给出完整的计数。我曾经在单独的子查询UNION中运行COUNT(*)withoutGROUP BY来给出总数,但这种方法似乎效率低下。有什么方法可以将两者结合起来?

SELECT PCUST, COUNT(*) FROM PAYMENT 
WHERE PAYMENT_DATE = '2020-12-30'
GROUP BY PCUST
UNION
SELECT 'TOTAL', COUNT(*) FROM PAYMENT
WHERE PAYMENT_DATE = '2020-12-30'

正如您从上面的查询中看到的那样,我重复相同的条件来获取部分计数和总计数。请建议任何方法来优化这一点。

标签: sqlcountdb2

解决方案


DB2 支持GROUPING SETS. 假设没有PCUSTNULL并且它是一个字符串,最简单的方法是:

SELECT COALESCE(PCUST, 'TOTAL'), COUNT(*)
FROM PAYMENT 
WHERE PAYMENT_DATE = '2020-12-30'
GROUP BY GROUPING_SETS ( (PCUST), () )

推荐阅读