sql - 带有 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'
正如您从上面的查询中看到的那样,我重复相同的条件来获取部分计数和总计数。请建议任何方法来优化这一点。
解决方案
DB2 支持GROUPING SETS
. 假设没有PCUST
值NULL
并且它是一个字符串,最简单的方法是:
SELECT COALESCE(PCUST, 'TOTAL'), COUNT(*)
FROM PAYMENT
WHERE PAYMENT_DATE = '2020-12-30'
GROUP BY GROUPING_SETS ( (PCUST), () )
推荐阅读
- hadoop - Flink 生成的 ORC 文件不能在 Hive 中使用
- ibm-midrange - 在 RPGLE 中,我如何检查 10 大小变量的最后 3 个字符是否为数字
- ios - Swift Decodable nestedContainer 和向后兼容性
- barcode - 使用 Zxing 的图像的多个条形码阅读器问题
- c# - Outlook 异常代码:0xc0000005 Visual Studio C#
- git-svn - git-svn:不在master上时如何防止“dcommit”,“rebase”
- c# - c# struct 当我不想要它时就像类一样
- fast-ai - 快速 AI vision.widgets.Image 显示为 PIL Image 但不同
- c# - C#使用输出变量调用存储过程时出错,未提供参数
- spring-boot - 我在哪里可以找到计划的 Spring Boot 发布日期