grouping函数 mysql_新特性解读 | GROUPING() 函数用法解析

作者:杨涛涛

资深数据库专家,专研 MySQL 十余年。擅长 MySQL、PostgreSQL、MongoDB 等开源数据库相关的备份恢复、SQL 调优、监控运维、高可用架构设计等。目前任职于爱可生,为各大运营商及银行金融企业提供 MySQL 相关技术支持、MySQL 相关课程培训等工作。

本文来源:原创投稿

*爱可生开源社区出品,原创内容未经授权不得随意使用,转载请联系小编并注明来源。

MySQL 8.0 新增了 GROUPING() 函数,用来理清 GROUP BY with rollup 子句检索后所产生的每个分组汇总结果。

grouping 可用在分组列,having 子句以及 order by 子句。在了解 grouping 函数如何使用之前,先来看看简单 group by with rollup 的检索是何种情形。

GROUP BY WITH ROLLUP

GROUP BY 子句 ROLLUP 可以为 GROUP BY 运行结果的每一个分组返回一个统计行,并且为所有分组返回一个总的统计行。

此文中所用的示例表 y1 结构:

mysql> show create table y1\G

*************************** 1. row ***************************

Table: y1

Create Table: CREATE TABLE `y1` (

`id` int NOT NULL,

`r1` int DEFAULT NULL,

`r2` int DEFAULT NULL,

PRIMARY KEY (`id`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci

1 row in set (0.00 sec)

按照字段 r1 r2 来正常检索,GROUP BY 的统计结果:

mysql> SELECT r1, r2, COUNT(*)

-> FROM y1

-> GROUP BY r1, r2;

+------+------+----------+

| r1 | r2 | count(*) |

+------+------+----------+

| 1 | 2 | 2 |

| 2 | 5 | 2 |

| 1 | 4 | 1 |

| 4 | 3 | 4 |

| 2 | 2 | 3 |

| 4 | 4 | 2 |

| 5 | 5 | 1 |

| 4 | 5 | 1 |

| 3 | 1 | 1 |

| 5 | 2 | 1 |

| 4 | 2 | 1 |

| 3 | 2 | 1 |

+------+------+----------+

12 rows in set (0.00 sec)

当此条统计 SQL 加上 ROLLUP 子句后,会在每个分组后面加上一行统计值,其中统计行高位字段显示为 NULL,COUNT 结果用来计算分组内的总记录数。

mysql> SELECT r1, r2, COUNT(*)

-> FROM y1

-> GROUP

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值