SQL GROUPING()函数

SQL GROUPING()函数

聚合是将对象集合绑定在一起作为单个实体。 SQL的 GROUPING() 函数用于验证group by子句中的列表达式是否聚合。如果给定的列表达式聚合,则此函数返回1,否则返回0。

此函数用于区分常规行中的NULL和表示超级聚合行中的所有值集的NULL(由ROLLUP操作生成)。

< p> 只有在指定GROUP BY时,才可以在SELECT,LIST,HAVING,ORDER BY子句中使用分组。

语法

以下是SQL的语法 GROUPING() 函数的语法 –

GROUPING(column_expression);

参数

  • column_expression - 它是一个包含在GROUP BY子句中的列或表达式。

示例

假设我们使用以下查询创建了一个名为customer的表 –

CREATE TABLE customers(ID INT NOT NULL, 
   NAME VARCHAR(30) NOT NULL, 
   AGE INT NOT NULL,
   ADDRESS CHAR(30), 
   SALARY DECIMAL(18, 2)
);

表存储了ID、名称、年龄、地址和薪水。现在我们正在使用INSERT语句向客户表中插入7条记录。

INSERT INTO customers VALUES(1, 'Ramesh', 32, 'Ahmedabad', 2000.00);
INSERT INTO customers VALUES(2, 'Khilan', 25, 'Delhi', 1500.00);
INSERT INTO customers VALUES(3, 'kaushik', 23, 'Kota', 2000.00);
INSERT INTO customers VALUES(4, 'Chaitali', 25, 'Mumbai', 6500.00);
INSERT INTO customers VALUES(5, 'Hardik', 27, 'Bhopal', 8500.00);
INSERT INTO customers VALUES(6, 'Komal', 22, 'MP', 4500.00);
INSERT INTO customers VALUES(7, 'Aman', 23, 'Ranchi', null);

客户表格将如下所示−

+----+----------+-----+-----------+---------+
| ID | NAME     | AGE | ADDRESS   | SALARY  |
+----+----------+-----+-----------+---------+
|  1 | Ramesh   |  32 | Ahmedabad | 2000.00 |
|  2 | Khilan   |  25 | Delhi     | 1500.00 |
|  3 | kaushik  |  23 | Kota      | 2000.00 |
|  4 | Chaitali |  25 | Mumbai    | 6500.00 |
|  5 | Hardik   |  27 | Bhopal    | 8500.00 |
|  6 | Komal    |  22 | MP        | 4500.00 |
|  7 | Aman     |  23 | Ranchi    |    NULL |
+----+----------+-----+-----------+---------+

下面是使用分组函数按年龄分组并对薪水总额进行聚合的查询:

SELECT AGE, SUM(SALARY) as SALARY_SUM, GROUPING(AGE) AS 'GROUPING' FROM customers GROUP BY AGE WITH ROLLUP;

输出

以下是上述SQL查询的输出结果,其中在AGE字段下显示着一个空值。这个空值是由ROLLUP操作添加的汇总行。汇总行显示了所有年龄组的薪水总和,这在GROUPING列中用1表示。

+------+------------+----------+
| AGE  | SALARY_SUM | GROUPING |
+------+------------+----------+
|   22 |    4500.00 |        0 |
|   23 |    2000.00 |        0 |
|   25 |    8000.00 |        0 |
|   27 |    8500.00 |        0 |
|   32 |    2000.00 |        0 |
| NULL |   25000.00 |        1 |
+------+------------+----------+

示例

我们可以在select语句或having子句中使用分组函数。当指定having子句时,我们可以使用分组函数仅检索超累加行或仅检索累加行,下面是一个示例:

SELECT AGE, SALARY, SUM(SALARY) 
as SALARY_SUM FROM customers GROUP BY AGE, SALARY 
WITH ROLLUP HAVING GROUPING(AGE) = 1 or GROUPING(SALARY) = 1;

输出

以下是上述 SQL 查询的输出结果 –

+------+--------+------------+
| AGE  | SALARY | SALARY_SUM |
+------+--------+------------+
|   22 |   NULL |    4500.00 |
|   23 |   NULL |    2000.00 |
|   25 |   NULL |    8000.00 |
|   27 |   NULL |    8500.00 |
|   32 |   NULL |    2000.00 |
| NULL |   NULL |   25000.00 |
+------+--------+------------+

示例

在以下示例中,我们正在使用grouping()函数来对两列进行分组。对于每一列,grouping函数在该列生成的空值是通过rollup操作产生的时返回1,否则返回0。

SELECT 
   ID, AGE, SUM(SALARY) as SUM, GROUPING(ID), GROUPING(AGE)
   FROM customers
   GROUP BY ID, AGE WITH ROLLUP;

输出

以下是上述SQL查询的输出:

+------+------+----------+--------------+---------------+
| ID   | AGE  | SUM      | GROUPING(ID) | GROUPING(AGE) |
+------+------+----------+--------------+---------------+
|    1 |   32 |  2000.00 |            0 |             0 |
|    1 | NULL |  2000.00 |            0 |             1 |
|    2 |   25 |  1500.00 |            0 |             0 |
|    2 | NULL |  1500.00 |            0 |             1 |
|    3 |   23 |  2000.00 |            0 |             0 |
|    3 | NULL |  2000.00 |            0 |             1 |
|    4 |   25 |  6500.00 |            0 |             0 |
|    4 | NULL |  6500.00 |            0 |             1 |
|    5 |   27 |  8500.00 |            0 |             0 |
|    5 | NULL |  8500.00 |            0 |             1 |
|    6 |   22 |  4500.00 |            0 |             0 |
|    6 | NULL |  4500.00 |            0 |             1 |
|    7 |   23 |     NULL |            0 |             0 |
|    7 | NULL |     NULL |            0 |             1 |
| NULL | NULL | 25000.00 |            1 |             1 |
+------+------+----------+--------------+---------------+

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程