欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

MySQL中with?rollup的用法及說(shuō)明

 更新時(shí)間:2022年10月11日 16:09:31   作者:wh柒八九  
這篇文章主要介紹了MySQL中with?rollup的用法及說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

MySQL with rollup的用法

當(dāng)需要對(duì)數(shù)據(jù)庫(kù)數(shù)據(jù)進(jìn)行分類(lèi)統(tǒng)計(jì)的時(shí)候,往往會(huì)用上groupby進(jìn)行分組。

而在groupby后面還可以加入withcube和withrollup等關(guān)鍵字對(duì)數(shù)據(jù)進(jìn)行匯總。

mysql文檔

with rollup概述

with在sql語(yǔ)句中定義在group by之后。當(dāng)需要對(duì)數(shù)據(jù)庫(kù)數(shù)據(jù)進(jìn)行分類(lèi)統(tǒng)計(jì)的時(shí)候,往往會(huì)用上groupby進(jìn)行分組。

而在groupby后面還可以加入withcube和withrollup等關(guān)鍵字對(duì)數(shù)據(jù)進(jìn)行匯總。

不過(guò)這個(gè)cube在mysql中并不適用。

應(yīng)用實(shí)例

現(xiàn)在有這樣一張學(xué)生表,里面的數(shù)據(jù)如下所示。

如果想對(duì)根據(jù)學(xué)生,對(duì)科目,分?jǐn)?shù)求和,可以這樣寫(xiě)。

如果想在這個(gè)的基礎(chǔ)上,求出學(xué)生的總分?jǐn)?shù),應(yīng)該怎么做。

使用 WITH ROLLUP,此函數(shù)是對(duì)聚合函數(shù)進(jìn)行求和,注意 with rollup是對(duì) group by 后的第一個(gè)字段,進(jìn)行分組求和。

ORDER BY不能在rollup中使用,兩者為互斥關(guān)鍵字,如果使用,會(huì)拋出以下錯(cuò)誤:Error Code:1221. Incorrect usage of CUBE/ROLLUP and ORDER BY。mysql5.7中是不支持的,在8.0以后支持。

相信大家已經(jīng)知道如何使用with rollup了,這個(gè)就是在group by分組之后,再次對(duì)聚合函數(shù)進(jìn)行求和。

MySQL with rollup 聚合函數(shù)類(lèi)似oracle cube操作

作用

在分組統(tǒng)計(jì)數(shù)據(jù)的基礎(chǔ)上再進(jìn)行統(tǒng)計(jì)匯總 

題目示例

根據(jù)題目意思需要 求每個(gè)價(jià)格區(qū)間,時(shí)間的mark=0的和/mark=1的和

最后還有求個(gè)所有價(jià)格區(qū)間 按月份的mark=0的和/mark=1的和

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

在不知道m(xù)ysql有 這種聚合函數(shù)的情況 我所想到的只能靠這樣拼接來(lái)實(shí)現(xiàn)

使用rollup后

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也是一種對(duì)數(shù)據(jù)的聚合操作。但是rollup只在層次上對(duì)數(shù)據(jù)進(jìn)行聚合,而cube對(duì)所有的維度進(jìn)行聚合。具有N個(gè)維度的列,cube需要2的N次方次分組操作,而rollup只需要N次分組操作。

rollup和cube的區(qū)別:

1)假設(shè)有n個(gè)維度,rollup會(huì)有n個(gè)聚合:

  • rollup(a,b) 統(tǒng)計(jì)列包含:(a,b)、(a)、()
  • rollup(a,b,c)統(tǒng)計(jì)列包含:(a,b,c)、(a,b)、(a)、()

2)假設(shè)有n個(gè)緯度,cube會(huì)有2的n次方個(gè)聚合

  • cube(a,b) 統(tǒng)計(jì)列包含:(a,b)、(a)、(b)、()
  • cube(a,b,c) 統(tǒng)計(jì)列包含:(a,b,c)、(a,b)、(a,c)、(b,c)、(a)、(b)、©、()

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

之前的group by 正常使用分組 加了 with rollup 在那個(gè)字段后就對(duì)所有價(jià)格區(qū)間進(jìn)行統(tǒng)計(jì) 同時(shí) with rollup 并不能放在 (group by a with rollup,b )中間

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • MySQL修改表一次添加多個(gè)列(字段)和索引的方法

    MySQL修改表一次添加多個(gè)列(字段)和索引的方法

    下面小編就為大家?guī)?lái)一篇MySQL修改表一次添加多個(gè)列(字段)和索引的方法。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-01-01
  • ubuntu下apt-get安裝和徹底卸載mysql詳解

    ubuntu下apt-get安裝和徹底卸載mysql詳解

    本文給大家分享ubuntu下apt-get安裝和徹底卸載mysql的方法,文中提到了安裝mysq命令查看mysql是否運(yùn)行的命令寫(xiě)法,具體內(nèi)容詳情大家通過(guò)本文學(xué)習(xí)吧
    2017-08-08
  • MySQL?binlog格式之Row和Statement語(yǔ)句詳解

    MySQL?binlog格式之Row和Statement語(yǔ)句詳解

    這篇文章主要為大家介紹了MySQL?binlog格式之Row和Statement語(yǔ)句詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-12-12
  • MySQL實(shí)現(xiàn)列轉(zhuǎn)行與行轉(zhuǎn)列的操作代碼

    MySQL實(shí)現(xiàn)列轉(zhuǎn)行與行轉(zhuǎn)列的操作代碼

    在處理數(shù)據(jù)時(shí),我們常常會(huì)遇到需要將表中的列(字段)轉(zhuǎn)換為行,或?qū)⑿修D(zhuǎn)換為列的情況,這種操作通常被稱(chēng)為“列轉(zhuǎn)行”(Pivoting)和“行轉(zhuǎn)列”(Unpivoting),本文將向您介紹如何使用 CASE 語(yǔ)句、聚合函數(shù)以及 GROUP BY 子句來(lái)完成列轉(zhuǎn)行和行轉(zhuǎn)列的操作
    2024-09-09
  • MySQL的root密碼忘記怎么辦 修改root密碼的方式

    MySQL的root密碼忘記怎么辦 修改root密碼的方式

    MySQL數(shù)據(jù)庫(kù)的root密碼忘記,怎么辦?修改root密碼的三種方式你知道嗎?下面就為大家提供詳細(xì)的解決方案,需要的朋友可以參考下
    2016-04-04
  • mysql如何按照中文排序解決方案

    mysql如何按照中文排序解決方案

    本文將詳細(xì)介紹mysql如何按照中文排序解決方案,需要的朋友可以參考下
    2012-11-11
  • mysql排名的三種常見(jiàn)方式

    mysql排名的三種常見(jiàn)方式

    這篇文章主要介紹了mysql排名的三種常見(jiàn)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-05-05
  • MySQL8新特性之全局參數(shù)持久化詳解

    MySQL8新特性之全局參數(shù)持久化詳解

    從8.0開(kāi)始,可通過(guò)SET PERSIST命令將全局變量的修改持久化到配置文件中,下面這篇文章主要給大家介紹了關(guān)于MySQL8新特性之全局參數(shù)持久化的相關(guān)資料,需要的朋友可以參考下
    2021-10-10
  • Mysql存儲(chǔ)引擎詳解

    Mysql存儲(chǔ)引擎詳解

    存儲(chǔ)引擎其實(shí)就是如何實(shí)現(xiàn)存儲(chǔ)數(shù)據(jù),如何為存儲(chǔ)的數(shù)據(jù)建立索引以及如何更新,查詢(xún)數(shù)據(jù)等技術(shù)實(shí)現(xiàn)的方法。本文我們來(lái)詳細(xì)探討下MySQL中的幾個(gè)存儲(chǔ)引擎(MyISAM、InnoDB、archive、MERGE)的相關(guān)知識(shí)
    2016-12-12
  • Linux下安裝mysql-5.6.12-linux-glibc2.5-x86_64.tar.gz

    Linux下安裝mysql-5.6.12-linux-glibc2.5-x86_64.tar.gz

    這篇文章主要介紹了Linux下安裝mysql-5.6.12-linux-glibc2.5-x86_64.tar.gz的相關(guān)資料,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下
    2016-09-09

最新評(píng)論