广告位联系
返回顶部
分享到

MySQL中with rollup的用法及说明

Mysql 来源:互联网 作者:佚名 发布时间:2022-10-15 21:53:05 人浏览
摘要

MySQL with rollup的用法 当需要对数据库数据进行分类统计的时候,往往会用上groupby进行分组。 而在groupby后面还可以加入withcube和withrollup等关键字对数据进行汇总。 mysql文档 with rollup概述

MySQL with rollup的用法

当需要对数据库数据进行分类统计的时候,往往会用上groupby进行分组。

而在groupby后面还可以加入withcube和withrollup等关键字对数据进行汇总。

mysql文档

with rollup概述

with在sql语句中定义在group by之后。当需要对数据库数据进行分类统计的时候,往往会用上groupby进行分组。

而在groupby后面还可以加入withcube和withrollup等关键字对数据进行汇总。

不过这个cube在mysql中并不适用。

应用实例

现在有这样一张学生表,里面的数据如下所示。

如果想对根据学生,对科目,分数求和,可以这样写。

如果想在这个的基础上,求出学生的总分数,应该怎么做。

使用 WITH ROLLUP,此函数是对聚合函数进行求和,注意 with rollup是对 group by 后的第一个字段,进行分组求和。

ORDER BY不能在rollup中使用,两者为互斥关键字,如果使用,会抛出以下错误:Error Code:1221. Incorrect usage of CUBE/ROLLUP and ORDER BY。mysql5.7中是不支持的,在8.0以后支持。

相信大家已经知道如何使用with rollup了,这个就是在group by分组之后,再次对聚合函数进行求和。

MySQL with rollup 聚合函数类似oracle cube操作

作用

在分组统计数据的基础上再进行统计汇总 

题目示例

根据题目意思需要 求每个价格区间,时间的mark=0的和/mark=1的和

最后还有求个所有价格区间 按月份的mark=0的和/mark=1的和

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

SELECT

    PriceBand,

    YearMonth,

    sum( CASE Mark WHEN 0 THEN VALUE END ) / sum( CASE Mark WHEN 1 THEN VALUE END )

FROM

    test

GROUP BY

    YearMonth,

    PriceBand UNION ALL

SELECT

    'Alll priceBand',

    YearMonth,

    sum( CASE Mark WHEN 0 THEN VALUE END ) / sum( CASE Mark WHEN 1 THEN VALUE END )

FROM

    test

GROUP BY

    YearMonth

在不知道mysql有 这种聚合函数的情况 我所想到的只能靠这样拼接来实现

使用rollup后

1

2

3

4

5

6

7

8

9

10

11

SELECT

    ifnull( PriceBand, 'All priceBand' ),

    YearMonth,

    sum( CASE Mark WHEN 0 THEN VALUE END ) / sum( CASE Mark WHEN 1 THEN VALUE END )

FROM

    test

GROUP BY

    YearMonth,

    PriceBand WITH ROLLUP

HAVING

    YearMonth IS NOT NULL

注意

在mysql5.6.17版本中,只定义了cube,但是不支持cube操作。

cube也是一种对数据的聚合操作。但是rollup只在层次上对数据进行聚合,而cube对所有的维度进行聚合。具有N个维度的列,cube需要2的N次方次分组操作,而rollup只需要N次分组操作。

rollup和cube的区别:

1)假设有n个维度,rollup会有n个聚合:

  • rollup(a,b) 统计列包含:(a,b)、(a)、()
  • rollup(a,b,c)统计列包含:(a,b,c)、(a,b)、(a)、()

2)假设有n个纬度,cube会有2的n次方个聚合

  • cube(a,b) 统计列包含:(a,b)、(a)、(b)、()
  • cube(a,b,c) 统计列包含:(a,b,c)、(a,b)、(a,c)、(b,c)、(a)、(b)、©、()

在mysql中 with rollup放的位置是有要求的

之前的group by 正常使用分组 加了 with rollup 在那个字段后就对所有价格区间进行统计 同时 with rollup 并不能放在 (group by a with rollup,b )中间


版权声明 : 本文内容来源于互联网或用户自行发布贡献,该文观点仅代表原作者本人。本站仅提供信息存储空间服务和不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权, 违法违规的内容, 请发送邮件至2530232025#qq.cn(#换@)举报,一经查实,本站将立刻删除。
原文链接 : https://blog.csdn.net/qq_31960623/article/details/115917641
相关文章
  • 深入了解MySQL中的慢查询
    一、什么是慢查询 什么是MySQL慢查询呢?其实就是查询的SQL语句耗费较长的时间。 具体耗费多久算慢查询呢?这其实因人而异,有些公司慢
  • MySQL中with rollup的用法及说明

    MySQL中with rollup的用法及说明
    MySQL with rollup的用法 当需要对数据库数据进行分类统计的时候,往往会用上groupby进行分组。 而在groupby后面还可以加入withcube和withrollup等关
  • mysql分组统计并求出百分比的方法

    mysql分组统计并求出百分比的方法
    mysql分组统计并求出百分比 1、mysql 分组统计并列出百分比 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 SELECT point_id, pname_cn, play_
  • 30种SQL语句优化的方法总结
    1)对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引。 2)应尽量避免在 where 子句中使用!=或操作符
  • 达梦数据库获取SQL实际执行计划的方法

    达梦数据库获取SQL实际执行计划的方法
    环境说明: 操作系统:银河麒麟V10 数据库:DM8 相关关键字:DM数据库、SQL实际执行计划 一、set autotrace trace disql下执行set autotrace trace开启
  • MySQL数据库约束的介绍

    MySQL数据库约束的介绍
    基本介绍 约束用于确保数据库的数据满足特定的商业规则 在mysql中,约束包括:not null,unique,primary key,foreign key 和check5种 1.primary key(主键
  • MySQL索引的介绍

    MySQL索引的介绍
    1. MySQL 索引的最左前缀原则 左前缀原则是联合索引在使用时要遵循的原则,查询索引可以使用联合索引的一部分,但是必须从最左侧开始。
  • windows下Mysql多实例部署的操作方法
    当存在多个项目的时候,需要同时部署时,且只有一台服务器时,哪么就需要部署Mysql多个实例,原理很简单,多个mysql服务运行使用不同的
  • MySQL客户端/服务器运行架构介绍

    MySQL客户端/服务器运行架构介绍
    之前对MySQL的认知只限于会写些SQL,本篇开始进行对MySQL进行深入的学习,记录和整理下自己对MySQL不熟悉的地方。如果有需要可以关注我的
  • mysql8.0主从复制搭建与配置方案

    mysql8.0主从复制搭建与配置方案
    mysql主从搭建 环境:ubuntu20.04.1,mysql:8.0.22。 主:192.168.87.3 备:192.168.87.6 安装数据库 1 2 3 sudo apt-get install mysql-server sudo apt-get install mysql
  • 本站所有内容来源于互联网或用户自行发布,本站仅提供信息存储空间服务,不拥有版权,不承担法律责任。如有侵犯您的权益,请您联系站长处理!
  • Copyright © 2017-2022 F11.CN All Rights Reserved. F11站长开发者网 版权所有 | 苏ICP备2022031554号-1 | 51LA统计