91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

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

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

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

發布時間:2020-10-07 06:06:53 來源:腳本之家 閱讀:136 作者:雪山飛豬 欄目:MySQL數據庫

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

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

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

SELECT
 a.empid,
 a.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 <= a.ordermonth
GROUP BY a.empid,a.ordermonth,a.qty
ORDER BY a.empid,a.ordermonth

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

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

運行結果如下

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

此外可能還需要篩選數據,例如只需要返回每個員工到達某一目標之前每月訂單的情況。這里假設統計每個員工的合計訂單數量達到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 avg
FROM emporders a
INNER JOIN emporders b
  ON a.empid=b.empid
  AND b.ordermonth <= a.ordermonth
WHERE DATE_FORMAT(a.ordermonth,'%Y')='2015' AND DATE_FORMAT(b.ordermonth,'%Y')='2015'
GROUP BY a.empid,a.ordermonth,a.qty
HAVING total<1000
ORDER 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 avg
FROM emporders a
INNER JOIN emporders b
  ON a.empid=b.empid
  AND b.ordermonth <= a.ordermonth
WHERE DATE_FORMAT(a.ordermonth,'%Y')='2015' AND DATE_FORMAT(b.ordermonth,'%Y')='2015'
GROUP BY a.empid,a.ordermonth,a.qty
HAVING total-a.qty < 1000
ORDER BY a.empid,a.ordermonth

運行結果如下

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

如果只想返回達到累積訂單數為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 avg
FROM emporders a
INNER JOIN emporders b
  ON a.empid=b.empid
  AND b.ordermonth <= a.ordermonth
WHERE DATE_FORMAT(a.ordermonth,'%Y')='2015' AND DATE_FORMAT(b.ordermonth,'%Y')='2015'
GROUP BY a.empid,a.ordermonth,a.qty
HAVING total-a.qty < 1000 AND total >= 1000
ORDER BY a.empid,a.ordermonth

運行結果如下

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

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

希望本文所述對大家MySQL數據庫計有所幫助。

向AI問一下細節

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

AI

和政县| 金坛市| 武穴市| 墨竹工卡县| 格尔木市| 阿拉善右旗| 全椒县| 庐江县| 潜山县| 会同县| 本溪市| 澎湖县| 夏邑县| 北安市| 丹寨县| 岱山县| 广州市| 区。| 昌平区| 都昌县| 襄城县| 静宁县| 承德县| 翁牛特旗| 通城县| 信阳市| 奉新县| 永城市| 九江县| 睢宁县| 丰宁| 灌阳县| 临邑县| 木兰县| 洮南市| 罗田县| 中阳县| 兴海县| 垦利县| 定远县| 阜康市|