您可以尝试GROUP BY类别和状态,并使用WITH ROLLUP获取聚合值:
SELECT category, status, count(*)
FROM test
GROUP BY category, status WITH ROLLUP
结果将如下所示:
category | status | count(*)
----------+--------+----------
test1 | A | 2
test1 | C | 1
test1 | NULL | 3
test2 | B | 1
test2 | NULL | 1
test3 | B | 1
test3 | NULL | 1
NULL | NULL | 5
如果忽略包含NULL的行,则其余的是常规GROUP BY类别status.有2个条目具有category =’test1’AND status =’A’,一个条目具有category =’test1’AND status =’C’,依此类推.
结果的第三行(category =’test1′,status = NULL,count(*)= 3)总结了category =’test1’的行.它计算所有具有category =’test1’的行的count(*),无论它们在列状态中具有什么值.以类似的方式计算category =’test2’和category =’test3’的汇总行.
最后一行是整个表的摘要. count(*)= 5包括所有行,无论它们在列类别和状态中具有什么值.