国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數據庫 > MySQL > 正文

mysql累積聚合原理與用法實例分析

2024-07-24 12:41:43
字體:
來源:轉載
供稿:網友

本文實例講述了mysql累積聚合原理與用法。分享給大家供大家參考,具體如下:

累積聚合為聚合從序列內第一個元素到當前元素的數據,如為每個員工返回每月開始到現在累積的訂單數量和平均訂單數量

行號問題有兩個解決方案,分別是為使用子查詢和使用連接。子查詢的方法通常比較直觀,可讀性強。但是在要求進行聚合時,子查詢需要為每個聚合掃描一次數據,而連接方法通常只需要掃描一次就可以得到結果。下面的查詢使用連接來得到結果

SELECT a.empid, a.ordermonth,a.qty AS thismonth, SUM(b.qty) AS total, CAST(AVG(b.qty) AS DECIMAL(5,2)) AS avgFROM emporders aINNER JOIN emporders b  ON a.empid=b.empid  AND b.ordermonth <= a.ordermonthGROUP BY a.empid,a.ordermonth,a.qtyORDER BY a.empid,a.ordermonth

如果只是查詢2015年的累積訂單,可以加上以where條件

WHERE DATE_FORMAT(a.ordermonth,'%Y')='2015' AND DATE_FORMAT(b.ordermonth,'%Y')='2015'

運行結果如下

此外可能還需要篩選數據,例如只需要返回每個員工到達某一目標之前每月訂單的情況。這里假設統計每個員工的合計訂單數量達到1000之前的累積情況。

這里可以使用HAVING過濾器來完成查詢

SELECT a.empid, a.ordermonth,a.qty AS thismonth, SUM(b.qty) AS total, CAST(AVG(b.qty) AS DECIMAL(5,2)) AS avgFROM emporders aINNER JOIN emporders b  ON a.empid=b.empid  AND b.ordermonth <= a.ordermonthWHERE DATE_FORMAT(a.ordermonth,'%Y')='2015' AND DATE_FORMAT(b.ordermonth,'%Y')='2015'GROUP BY a.empid,a.ordermonth,a.qtyHAVING total<1000ORDER BY a.empid,a.ordermonth

這里并沒有統計到達到1000時該月的情況,如果要進行統計,則情況又有點復雜。如果指定了total <= 1000,則只有該月訂單數量正好為1000才進行統計,否則不會對該月進行統計。因此這個問題的過濾,可以從另外一個方面來考慮。當累積累積訂單小于1000時,累積訂單與上個月的訂單之差是小于1000的,同時也能對第一個訂單數量超過1000的月份進行統計。故該解決方案的SQL語句如下

SELECT a.empid, a.ordermonth,a.qty AS thismonth, SUM(b.qty) AS total, CAST(AVG(b.qty) AS DECIMAL(5,2)) AS avgFROM emporders aINNER JOIN emporders b  ON a.empid=b.empid  AND b.ordermonth <= a.ordermonthWHERE DATE_FORMAT(a.ordermonth,'%Y')='2015' AND DATE_FORMAT(b.ordermonth,'%Y')='2015'GROUP BY a.empid,a.ordermonth,a.qtyHAVING total-a.qty < 1000ORDER BY a.empid,a.ordermonth

運行結果如下

如果只想返回達到累積訂單數為1000的當月數據,不返回之前的月份,則可以對上述SQL語句

進一步過濾,再添加累積訂單數量大于等于1000的條件。該問題的SQL語句如下,

SELECT a.empid, a.ordermonth,a.qty AS thismonth, SUM(b.qty) AS total, CAST(AVG(b.qty) AS DECIMAL(5,2)) AS avgFROM emporders aINNER JOIN emporders b  ON a.empid=b.empid  AND b.ordermonth <= a.ordermonthWHERE DATE_FORMAT(a.ordermonth,'%Y')='2015' AND DATE_FORMAT(b.ordermonth,'%Y')='2015'GROUP BY a.empid,a.ordermonth,a.qtyHAVING total-a.qty < 1000 AND total >= 1000ORDER BY a.empid,a.ordermonth
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 房产| 察隅县| 涪陵区| 华亭县| 鄄城县| 临邑县| 吉林省| 万盛区| 海盐县| 伊吾县| 澳门| 来宾市| 平昌县| 江源县| 巫山县| 香格里拉县| 民权县| 深泽县| 井冈山市| 于田县| 遂宁市| 都匀市| 武夷山市| 汉沽区| 专栏| 新乐市| 永安市| 商南县| 额尔古纳市| 琼结县| 赤峰市| 高密市| 沁水县| 铜陵市| 溧水县| 丰宁| 勃利县| 阳信县| 兰考县| 西畴县| 义乌市|