溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

MySQL數(shù)據(jù)庫中累積聚合的原理是什么

發(fā)布時間:2021-07-12 09:39:11 來源:億速云 閱讀:210 作者:Leah 欄目:數(shù)據(jù)庫

MySQL數(shù)據(jù)庫中累積聚合的原理是什么,很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細講解,有這方面需求的人可以來學習下,希望你能有所收獲。

累積聚會

累積聚合為聚合從序列內(nèi)第一個元素到當前元素的數(shù)據(jù),如為每個員工返回每月開始到現(xiàn)在累積的訂單數(shù)量和平均訂單數(shù)量。

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

下面的查詢使用連接來得到結(jié)果

SELECTa.empid,a.ordermonth,a.qty AS thismonth,SUM(b.qty) AS total,CAST(AVG(b.qty) AS DECIMAL(5,2)) AS avgFROM emporders a  INNER JOIN emporders bON a.empid=b.empidAND b.ordermonth <= a.ordermonth  GROUP 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'

運行結(jié)果如下

MySQL數(shù)據(jù)庫中累積聚合的原理是什么

此外可能還需要篩選數(shù)據(jù),例如只需要返回每個員工到達某一目標之前每月訂單的情況。這里假設(shè)統(tǒng)計每個員工的合計訂單數(shù)量達到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

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

運行結(jié)果如下

MySQL數(shù)據(jù)庫中累積聚合的原理是什么

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

進一步過濾,再添加累積訂單數(shù)量大于等于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

運行結(jié)果如下

MySQL數(shù)據(jù)庫中累積聚合的原理是什么

看完上述內(nèi)容是否對您有幫助呢?如果還想對相關(guān)知識有進一步的了解或閱讀更多相關(guān)文章,請關(guān)注億速云行業(yè)資訊頻道,感謝您對億速云的支持。

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI