PostgreSQL – 分组集
在 PostgreSQL 中,GROUPING SETS 用于生成与多个 GROUP BY 子句的 UNION ALL 生成的结果集等效的结果集。分组集是用户分组所依据的一组列。通常,单个聚合查询定义单个分组集。
GROUPING SETS
语法 –
SELECT
column1,
column2,
aggregate_function(column3)
FROM
table_name
GROUP BY
GROUPING SETS (
(column1, column2),
(ccolumn1),
(column2),
()
);
为了更好地理解这个概念,让我们创建一个新表并继续示例。
要创建示例表,请使用以下命令:
CREATE TABLE geeksforgeeks_courses(
course_name VARCHAR NOT NULL,
segment VARCHAR NOT NULL,
quantity INT NOT NULL,
PRIMARY KEY (course_name, segment)
);
现在使用以下命令向其中插入一些数据:
INSERT INTO geeksforgeeks_courses(course_name, segment, quantity)
VALUES
('Data Structure in Python', 'Premium', 100),
('Algorithm Design in Python', 'Basic', 200),
('Data Structure in Java', 'Premium', 100),
('Algorithm Design in Java', 'Basic', 300);
现在我们的表格已经设置好,让我们看看例子。
示例 1:
以下查询定义了 course_name 和段的分组集。它返回按品牌和细分市场销售的产品数量。
SELECT
course_name,
segment,
SUM (quantity)
FROM
geeksforgeeks_courses
GROUP BY
course_name,
segment;
输出:
示例 2:
course_name
出售的课程数。它定义了course_name
的分组集:
SELECT
course_name,
SUM (quantity)
FROM
geeksforgeeks_courses
GROUP BY
course_name;
输出:
示例 3:
以下查询查找按细分市场销售的产品数量。它定义了段的分组集:
SELECT
segment,
SUM (quantity)
FROM
geeksforgeeks_courses
GROUP BY
segment;
输出:
示例 4:
在以下查询中,我们将使用所有分组集的聚合生成单个结果集。
SELECT
GROUPING(course_name) grouping_course,
GROUPING(segment) grouping_segement,
course_name,
segment,
SUM (quantity)
FROM
geeksforgeeks_courses
GROUP BY
GROUPING SETS (
(course_name, segment),
(course_name),
(segment),
()
)
ORDER BY
course_name,
segment;
输出: