Mysql 简明教程
MySQL - ROLLUP
The MySQL ROLLUP Clause
MySQL ROLLUP 子句是 GROUP BY 子句的扩展。它与 MySQL 中的聚合函数一起使用,以在表内的额外行中找到总计或列值的汇总(也称为该列的超聚合)。
考虑一家制造工厂在表中跟踪月度生产数据。若要确定年产量,可以与 ROLLUP 一起使用 SUM() 聚合函数。但是,如果您需要找出产量低于特定阈值的月份数,则 ROLLUP 也允许您使用 COUNT() 函数对这些月份进行计数。
Syntax
以下 MySQL 中 ROLLUP 子句的语法 −
SELECT AggregateFunction(column_name(s)), column_name(s)
FROM table_name
GROUP BY column_name(s)
WITH ROLLUP;
Example
首先,我们将创建一个名为 "PRODUCT" 的表,其中包含生产信息,例如产品 ID、产品名称、产品数量以及组织内的生产月份 −
CREATE TABLE PRODUCT (
PRODUCT_ID INT,
PRODUCT_NAME VARCHAR(50),
PRODUCT_COUNT INT,
MONTH VARCHAR(20)
);
现在,让我们向上述创建的表中插入一些数据 −
INSERT INTO PRODUCT VALUES
(101, 'Comb', 2345, 'January'),
(102, 'Coffee Mugs', 1242, 'January'),
(103, 'Cutlery', 124, 'January'),
(101, 'Comb', 3263, 'February'),
(102, 'Coffee Mugs', 10982, 'February'),
(103, 'Cutlery', 435, 'February');
获得的 PRODUCT 表如下 −
现在,让我们如下所示使用 ROLLUP 找出每月生产的产品总数 −
SELECT SUM(PRODUCT_COUNT), MONTH
FROM PRODUCT
GROUP BY MONTH WITH ROLLUP;
ROLLUP on Multiple Columns
您还可以使用 GROUP BY 子句对同一组中多个列进行 ROLLUP。
Example
在此,我们在 PRODUCT 表的列 "PRODUCT_ID" 和 "PRODUCT_NAME" 上应用 GROUP BY 子句 −
SELECT PRODUCT_ID,
COUNT(PRODUCT_ID) AS PROD_ID_COUNT,
PRODUCT_NAME,
COUNT(PRODUCT_NAME) AS PROD_ID_NAME
FROM PRODUCT
GROUP BY PRODUCT_ID, PRODUCT_NAME;
我们获得以下输出 −
现在,使用 ROLLUP
计算这两行的摘要,如下面的查询中所示:
SELECT PRODUCT_ID,
COUNT(PRODUCT_ID) AS PROD_ID_COUNT,
PRODUCT_NAME,
COUNT(PRODUCT_NAME) AS PROD_ID_NAME
FROM PRODUCT
GROUP BY PRODUCT_ID, PRODUCT_NAME
WITH ROLLUP;
您可以在下面的输出中看到,摘要不仅在最终级别计算,而且在两个级别计算。对于每个产品名称,都会显示一列摘要: