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

mysql滑動聚合/年初至今聚合原理與用法實例分析

 更新時間:2019年12月27日 11:25:18   作者:雪山飛豬  
這篇文章主要介紹了mysql滑動聚合原理與用法,結(jié)合實例形式分析了mysql滑動聚合的相關(guān)功能、原理、使用方法及操作注意事項,需要的朋友可以參考下

本文實例講述了mysql滑動聚合/年初至今聚合原理與用法。分享給大家供大家參考,具體如下:

滑動聚合是按順序?qū)瑒哟翱诜秶鷥?nèi)的數(shù)據(jù)進(jìn)行聚合的操作。下累積聚合不同,滑動聚合并不是統(tǒng)計開始計算的位置到當(dāng)前位置的數(shù)據(jù)。

這里以統(tǒng)計最近三個月中員工第月訂單情況為例來介紹滑動聚合。

滑動聚合和累積聚合解決方案的主要區(qū)別在于連接的條件不同。滑動聚合條件不再是b.ordermonth <= a.ordermonth,而應(yīng)該是b.ordermonth大于前三個月的月份,并且小于當(dāng)前月份。因此滑動聚合的解決方案的SQL語句如下

SELECT
 a.empid,
 DATE_FORMAT(a.ordermonth, '%Y-%m') AS ordermonth,
 a.qty AS thismonth,
 SUM(b.qty) AS total,
 CAST(AVG(b.qty) AS DECIMAL(5,2)) AS avg
FROM emporders a
INNER JOIN emporders b
 ON a.empid=b.empid
 AND b.ordermonth > DATE_ADD(a.ordermonth, INTERVAL -3 MONTH)
 AND b.ordermonth <= a.ordermonth
WHERE DATE_FORMAT(a.ordermonth,'%Y')='2015' AND DATE_FORMAT(b.ordermonth,'%Y')='2015'
GROUP BY a.empid,DATE_FORMAT(a.ordermonth, '%Y-%m'),a.qty
ORDER BY a.empid,a.ordermonth

運行結(jié)果如下

該解決方案返回的是三個月為一個周期的滑動聚合,但是每個用戶包含前兩個月并且未滿3個月的聚合。如果只希望返回滿3個月的聚合,不返回未滿3個月的聚合,可以使用HAVING過濾器進(jìn)行過濾,過濾的條件為MIN(b.ordermonth)=DATE_ADD(a.ordermonth, INTERVAL -2 MONTH),例如

SELECT
 a.empid,
 a.ordermonth AS ordermonth,
 a.qty AS thismonth,
 SUM(b.qty) AS total,
 CAST(AVG(b.qty) AS DECIMAL(5,2)) AS avg
FROM emporders a
INNER JOIN emporders b
 ON a.empid=b.empid
 AND b.ordermonth > DATE_ADD(a.ordermonth, INTERVAL -3 MONTH)
 AND b.ordermonth <= a.ordermonth
WHERE DATE_FORMAT(a.ordermonth,'%Y')='2015' AND DATE_FORMAT(b.ordermonth,'%Y')='2015' AND a.empid=1
GROUP BY a.empid,DATE_FORMAT(a.ordermonth, '%Y-%m'),a.qty
HAVING MIN(b.ordermonth)=DATE_ADD(a.ordermonth, INTERVAL-2 MONTH)
ORDER BY a.empid,a.ordermonth

運行結(jié)果如下

年初至今聚合和滑動聚合類似,不同的地方僅在于統(tǒng)計的僅為當(dāng)前一年的聚合。唯一的區(qū)別體現(xiàn)在下限的開始位置上。在年初至今的問題中,下限為該年的第一天,而滑動聚合的下限為N個月的第一天。因此,年初至今的問題的解決方案如下圖所示,得到的結(jié)果

SELECT
 a.empid,
 DATE_FORMAT(a.ordermonth, '%Y-%m') AS ordermonth,
 a.qty AS thismonth,
 SUM(b.qty) AS total,
 CAST(AVG(b.qty) AS DECIMAL(5,2)) AS avg
FROM emporders a
INNER JOIN emporders b
  ON a.empid=b.empid
  AND b.ordermonth >= DATE_FORMAT(a.ordermonth, '%Y-01-01')
  AND b.ordermonth <= a.ordermonth
  AND DATE_FORMAT(b.ordermonth,'%Y')='2015'
GROUP BY a.empid,a.ordermonth,a.qty
ORDER BY a.empid,a.ordermonth

運行結(jié)果如下

更多關(guān)于MySQL相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《MySQL查詢技巧大全》、《MySQL常用函數(shù)大匯總》、《MySQL日志操作技巧大全》、《MySQL事務(wù)操作技巧匯總》、《MySQL存儲過程技巧大全》及《MySQL數(shù)據(jù)庫鎖相關(guān)技巧匯總

希望本文所述對大家MySQL數(shù)據(jù)庫計有所幫助。

相關(guān)文章

  • 解析MySQL中INSERT INTO SELECT的使用

    解析MySQL中INSERT INTO SELECT的使用

    本篇文章是對MySQL中INSERT INTO SELECT的使用進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-07-07
  • mysql?8.0.27?解壓版安裝配置方法圖文教程

    mysql?8.0.27?解壓版安裝配置方法圖文教程

    這篇文章主要為大家詳細(xì)介紹了mysql?8.0.27?解壓版安裝配置方法圖文教程,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-04-04
  • 總結(jié)幾種MySQL中常見的排名問題

    總結(jié)幾種MySQL中常見的排名問題

    這篇文章主要總結(jié)了幾種MySQL中常見的排名問題,幫助大家更好的理解和使用MySQL,感興趣的朋友可以了解下
    2020-09-09
  • MySQL 不允許從遠(yuǎn)程訪問的解決方法

    MySQL 不允許從遠(yuǎn)程訪問的解決方法

    MySQL 不允許從遠(yuǎn)程訪問的原因有很多除了下面的方法,還有需要看服務(wù)器安全設(shè)置禁止訪問本機的3306端口。
    2010-03-03
  • 深入探究MySQL中使用where 1=1是否存在性能影響

    深入探究MySQL中使用where 1=1是否存在性能影響

    最近在項目中使用 mybatis 寫 SQL 使用了 where 1=1 來簡化多條件拼接的寫法,案例如下,借此聊聊多條件拼接的常見的一些寫法以及 where 1=1 是否存在性能影響,需要的朋友可以參考下
    2024-02-02
  • MySQL無法輸入中文字符問題的解決辦法

    MySQL無法輸入中文字符問題的解決辦法

    MySQL無法輸入中文的問題大多是由于字符集不匹配所導(dǎo)致的,下面這篇文章主要給大家介紹了關(guān)于MySQL無法輸入中文字符問題的解決辦法,文中通過實例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-05-05
  • mysql修改表結(jié)構(gòu)方法實例詳解

    mysql修改表結(jié)構(gòu)方法實例詳解

    這篇文章主要介紹了mysql修改表結(jié)構(gòu)方法,以實例形式較為詳細(xì)的分析了mysql修改表結(jié)構(gòu)的具體方法與相關(guān)注意事項,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-10-10
  • 詳細(xì)分析mysql MDL元數(shù)據(jù)鎖

    詳細(xì)分析mysql MDL元數(shù)據(jù)鎖

    這篇文章主要介紹了mysql MDL元數(shù)據(jù)鎖的相關(guān)資料,文中講解非常細(xì)致,代碼幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下
    2020-08-08
  • CentOS 7.2 Yum編譯安裝MySQL 5.6

    CentOS 7.2 Yum編譯安裝MySQL 5.6

    這篇文章主要為大家介紹了CentOS 7.2 Yum編譯安裝MySQL 5.6詳細(xì)代碼,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-11-11
  • MySQL解決字符集編碼問題

    MySQL解決字符集編碼問題

    MySQL的默認(rèn)編碼方式是?拉丁文,如果想要設(shè)置一些漢字的數(shù)據(jù).可能會報錯.這篇文章中主要介紹了解決這個問題的方法,需要的朋友可以參考一下
    2023-04-04

最新評論