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;

Output

您可以在下面的输出中观察到,1 月和 2 月的单个产品数量已计算出来,并且使用 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;

您可以在下面的输出中看到,摘要不仅在最终级别计算,而且在两个级别计算。对于每个产品名称,都会显示一列摘要:

Rollup Using Client Program

我们还可以使用客户端程序执行汇总。

Syntax

Example

以下是这些程序 −