首页 > 解决方案 > SQL Oracle:如何获取 GROUP BY 的求和结果,如何选择条件不同的数据

问题描述

这是我的 sql

SELECT userType , COUNT(*) total
FROM tableA
WHERE userType = 'N'
AND user_date IS NOT NULL
GROUP BY userType 
UNION ALL
SELECT userType , COUNT(*) total
FROM tableA
WHERE userType = 'Y'
GROUP BY userType;

结果是

___________ ________
| USERTYPE | TOTAL |
--------------------
| N        | 5     |
| Y        | 4     |
--------------------

我的问题是如何得到这样的结果。

___________ ________
| USERTYPE | TOTAL |
--------------------
| N        | 5     |
| Y        | 4     |
| SUM      | 9     |
--------------------

或者,如果它不能是总价值的总和应该是什么。如果您有更好的方法可以更改它,那么我顶部的 sql 无法修复,只要您认为它有效,请告诉我谢谢。

标签: sqloracleoracle11g

解决方案


一种方法是grouping sets。但union此查询不需要:

SELECT COALESCE(userType, 'SUM'), COUNT(*) as total
FROM tableA
WHERE (userType = 'N' AND user_date IS NOT NULL) OR
      userType = 'Y' 
GROUP BY GROUPING SETS ( (userType), () );

推荐阅读