Điều này hiện có thể thực hiện được trong phiên bản 9.5 của Postgres :
Lược đồ PostgreSQL 9.5
CREATE TABLE basket(fruits text, a integer, b integer, c integer);
CREATE TABLE
INSERT INTO basket(fruits, a, b, c) values('apples', 1, 1, 1),
('apples', 0, 1, 2),
('bananas', 1, 1, 2),
('oranges', 1, 1, 1);
Truy vấn
SELECT coalesce(fruits,'total'), sum(a) a, sum(b) b, sum(c) c
FROM basket
GROUP BY ROLLUP((fruits))
Kết quả
fruits | a | b | c
---------+---+---+---
apples | 1 | 2 | 3
bananas | 1 | 1 | 2
oranges | 1 | 1 | 1
total | 3 | 4 | 6
ROLLUP
này tương đương với việc sử dụng biểu thức với GROUPING SETS
:
SELECT fruits, sum(a) a, sum(b) b, sum(c) c
FROM basket
GROUP BY GROUPING SETS (fruits, ())
Mỗi danh sách con trong GROUPING SETS
được diễn giải theo cách giống như thể nó trực tiếp trong mệnh đề GROUP BY.