自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

詳解MySQL數(shù)據(jù)庫(kù)累積聚合原理與用法實(shí)例分析

數(shù)據(jù)庫(kù) MySQL
今天主要介紹一下mysql累積聚合原理與用法。下面,我們一起來(lái)看看吧。

今天主要介紹一下mysql累積聚合原理與用法。下面,我們一起來(lái)看看吧~

[[311690]]

累積聚會(huì)

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

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

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

  1. 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條件

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

運(yùn)行結(jié)果如下

詳解mysql數(shù)據(jù)庫(kù)累積聚合原理與用法實(shí)例分析

此外可能還需要篩選數(shù)據(jù),例如只需要返回每個(gè)員工到達(dá)某一目標(biāo)之前每月訂單的情況。這里假設(shè)統(tǒng)計(jì)每個(gè)員工的合計(jì)訂單數(shù)量達(dá)到1000之前的累積情況。

這里可以使用HAVING過(guò)濾器來(lái)完成查詢

  1. 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 

這里并沒(méi)有統(tǒng)計(jì)到達(dá)到1000時(shí)該月的情況,如果要進(jìn)行統(tǒng)計(jì),則情況又有點(diǎn)復(fù)雜。如果指定了total <= 1000,則只有該月訂單數(shù)量正好為1000才進(jìn)行統(tǒng)計(jì),否則不會(huì)對(duì)該月進(jìn)行統(tǒng)計(jì)。因此這個(gè)問(wèn)題的過(guò)濾,可以從另外一個(gè)方面來(lái)考慮。當(dāng)累積累積訂單小于1000時(shí),累積訂單與上個(gè)月的訂單之差是小于1000的,同時(shí)也能對(duì)第一個(gè)訂單數(shù)量超過(guò)1000的月份進(jìn)行統(tǒng)計(jì)。故該解決方案的SQL語(yǔ)句如下

  1. 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 

運(yùn)行結(jié)果如下

詳解mysql數(shù)據(jù)庫(kù)累積聚合原理與用法實(shí)例分析

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

進(jìn)一步過(guò)濾,再添加累積訂單數(shù)量大于等于1000的條件。該問(wèn)題的SQL語(yǔ)句如下,

  1. 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 

運(yùn)行結(jié)果如下

詳解mysql數(shù)據(jù)庫(kù)累積聚合原理與用法實(shí)例分析

責(zé)任編輯:趙寧寧 來(lái)源: 今日頭條
相關(guān)推薦

2009-12-31 11:10:01

2021-02-17 13:52:35

數(shù)據(jù)庫(kù)group byMySQL

2011-05-19 13:25:14

Oracle數(shù)據(jù)庫(kù)

2010-04-01 09:45:38

NoSQL

2010-06-02 11:34:23

MySQL 數(shù)據(jù)庫(kù)導(dǎo)入

2019-07-17 10:19:36

MySQL數(shù)據(jù)庫(kù)SQL

2009-09-07 15:25:24

MySQL數(shù)據(jù)庫(kù)互操作Silverlight

2010-06-04 10:40:55

AJAX MySQL

2011-03-29 10:47:49

ORACLE數(shù)據(jù)庫(kù)

2011-06-21 15:11:04

QT 數(shù)據(jù)庫(kù)

2010-03-10 11:29:47

MySQL數(shù)據(jù)庫(kù)性能調(diào)

2009-07-28 14:16:31

ASP.NET與MyS

2010-06-01 14:42:55

連接MySQL數(shù)據(jù)庫(kù)

2011-08-11 16:55:34

Oracle數(shù)據(jù)庫(kù)AWR

2011-07-26 18:11:56

iPhone Sqlite 數(shù)據(jù)庫(kù)

2024-11-19 13:11:19

2022-03-29 10:52:08

MySQL數(shù)據(jù)庫(kù)

2011-07-12 16:41:14

mysql處理異常

2011-07-05 16:08:10

2010-06-09 17:36:45

MySQL數(shù)據(jù)庫(kù)同步
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)