最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

MySQL中按月統(tǒng)計(jì)并逐月累加統(tǒng)計(jì)值的幾種實(shí)現(xiàn)寫(xiě)法

 更新時(shí)間:2023年10月31日 15:33:52   作者:高級(jí)盤(pán)絲洞  
有時(shí)候,我們可能有這樣的場(chǎng)景,需要將銷(xiāo)量按月統(tǒng)計(jì),并且按月逐月累加,本文就來(lái)介紹一下MySQL中按月統(tǒng)計(jì)并逐月累加統(tǒng)計(jì)值的幾種實(shí)現(xiàn)寫(xiě)法,感興趣的可以了解一下

有時(shí)候,我們可能有這樣的場(chǎng)景,需要將銷(xiāo)量按月統(tǒng)計(jì),并且按月逐月累加。寫(xiě)慣了GROUP BY,按月統(tǒng)計(jì)倒是小case,但是逐月累加實(shí)現(xiàn)起來(lái),要稍微麻煩一點(diǎn)。下面就整理幾種寫(xiě)法,以備不時(shí)之需。

本月第一天

-- 本月第一天
SELECT DATE_ADD(CURDATE(), INTERVAL -DAY(CURDATE()) + 1 DAY);
 
-- 本月第一天
SELECT CONCAT(DATE_FORMAT(CURDATE(), '%Y-%m'), '-01');

建表及模擬數(shù)據(jù)

-- 創(chuàng)建表
CREATE TABLE `sales` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `sales_date` date NOT NULL,
  `sales_amount` decimal(10,2) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- 插入模擬數(shù)據(jù)
INSERT INTO `sales` (`sales_date`, `sales_amount`) VALUES
('2023-01-01', 1500.00),
('2023-01-02', 1800.00),
('2023-01-05', 2200.00),
('2023-02-01', 1200.00),
('2023-02-03', 1800.00),
('2023-03-01', 2500.00),
('2023-03-05', 2800.00),
('2023-03-08', 3200.00),
('2023-04-01', 2100.00),
('2023-04-03', 1900.00),
('2023-04-05', 2600.00),
('2023-05-01', 3100.00),
('2023-05-02', 3400.00),
('2023-06-01', 3800.00),
('2023-06-06', 4200.00);

該表包含三個(gè)字段:id、sales_date、sales_amount。id為自增長(zhǎng)主鍵,sales_date為銷(xiāo)售日期,sales_amount為銷(xiāo)售額。插入了15條模擬數(shù)據(jù),涵蓋了2023年1月至6月的銷(xiāo)售數(shù)據(jù)

一、自連接和子查詢(xún)

首先在內(nèi)部查詢(xún)中計(jì)算出每個(gè)月份的銷(xiāo)售總額和月份;接著在外部查詢(xún)中使用自連接和子查詢(xún)計(jì)算每個(gè)月份的累計(jì)銷(xiāo)售額

SELECT t1.month, t1.monthly_sales,
       SUM(t2.monthly_sales) AS cumulative_sales
FROM (
  SELECT DATE_FORMAT(sales_date, '%Y-%m') AS month,
         SUM(sales_amount) AS monthly_sales
  FROM sales
  GROUP BY month
) t1
JOIN (
  SELECT DATE_FORMAT(sales_date, '%Y-%m') AS month,
         SUM(sales_amount) AS monthly_sales
  FROM sales
  GROUP BY month
) t2 ON t1.month >= t2.month
GROUP BY t1.month;

二、子查詢(xún)

SELECT month, monthly_sales,
       (SELECT SUM(monthly_sales) 
        FROM (
          SELECT DATE_FORMAT(sales_date, '%Y-%m') AS month, SUM(sales_amount) AS monthly_sales
          FROM sales
          GROUP BY month
        ) t2
        WHERE t2.month <= t1.month) AS cumulative_sales
FROM (
  SELECT DATE_FORMAT(sales_date, '%Y-%m') AS month, SUM(sales_amount) AS monthly_sales
  FROM sales
  GROUP BY month
) t1;

此處使用了兩個(gè)子查詢(xún),第一個(gè)子查詢(xún)用于獲取每個(gè)月份的總銷(xiāo)售額和月份,第二個(gè)子查詢(xún)用于計(jì)算累加值。在內(nèi)部子查詢(xún)中,通過(guò)<=操作符將當(dāng)前月份以及之前所有月份的銷(xiāo)售額相加,從而得到累加值

三、子查詢(xún)+變量

SELECT month, monthly_sales, @cumulative := @cumulative + monthly_sales AS cumulative
FROM (
  SELECT DATE_FORMAT(sales_date, '%Y-%m') AS month, SUM(sales_amount) AS monthly_sales
  FROM sales
  GROUP BY month
) t1
CROSS JOIN (SELECT @cumulative := 0) t2;

此處使用了兩個(gè)子查詢(xún),第一個(gè)子查詢(xún)用于獲取每個(gè)月份的總銷(xiāo)售額和月份,第二個(gè)子查詢(xún)用于初始化變量@cumulative。在外部查詢(xún)中,通過(guò)CROSS JOIN將兩個(gè)子查詢(xún)連接起來(lái),并且使用變量@cumulative來(lái)計(jì)算累加值。

四、用戶(hù)變量和子查詢(xún)

在內(nèi)部查詢(xún)中先對(duì)銷(xiāo)售日期進(jìn)行排序,然后使用用戶(hù)變量@cumulative來(lái)記錄每個(gè)月份的累加值。在最終的查詢(xún)結(jié)果中,輸出月份、當(dāng)月銷(xiāo)售額以及累加值

SELECT month, monthly_sales,
       (@cumulative := @cumulative + monthly_sales) AS cumulative_sales
FROM (
  SELECT DATE_FORMAT(sales_date, '%Y-%m') AS month, 
         SUM(sales_amount) AS monthly_sales
  FROM sales
  GROUP BY month
  ORDER BY sales_date ASC
) t1, (SELECT @cumulative := 0) t2;

此處使用了兩個(gè)子查詢(xún),第一個(gè)子查詢(xún)用于獲取每個(gè)月份的總銷(xiāo)售額和月份,并按銷(xiāo)售日期升序排序;第二個(gè)子查詢(xún)用于初始化用戶(hù)變量@cumulative。在外部查詢(xún)中,通過(guò),連接兩個(gè)子查詢(xún),并使用用戶(hù)變量@cumulative來(lái)計(jì)算每個(gè)月份的累加值。

五、表達(dá)式(CTE)和窗口函數(shù)

使用MySQL 8.0引入的通用表表達(dá)式(CTE)和窗口函數(shù),可以將累加值計(jì)算放在CTE中完成

WITH monthly_sales AS (
  SELECT DATE_FORMAT(sales_date, '%Y-%m') AS month, 
         SUM(sales_amount) AS monthly_sales
  FROM sales
  GROUP BY month
)
SELECT month, monthly_sales,
       SUM(monthly_sales) OVER (ORDER BY month) AS cumulative_sales
FROM monthly_sales;

此處使用了CTE來(lái)計(jì)算每個(gè)月份的總銷(xiāo)售額和月份,并在外部查詢(xún)中使用窗口函數(shù)SUM() OVER()對(duì)月份進(jìn)行累加。

SUM() OVER()

使用MySQL 8.0引入的LATERAL關(guān)鍵字,以及OVER ORDER BY子句,按月份求和,再用SUM() OVER()進(jìn)行累加,并分別輸出月份、當(dāng)月銷(xiāo)售金額和累計(jì)銷(xiāo)售金額

##月統(tǒng)計(jì)
SELECT  month, monthly_sales,
       SUM(monthly_sales) OVER (ORDER BY month) AS cumulative_sales
FROM (
  SELECT DATE_FORMAT(sales_date, '%Y-%m') AS month,
         SUM(sales_amount) AS monthly_sales
  FROM sales
  GROUP BY month
) t1;

##日統(tǒng)計(jì)
SELECT  day, monthly_sales,
       SUM(monthly_sales) OVER (ORDER BY day) AS cumulative_sales
FROM (
  SELECT DATE_FORMAT(sales_date, '%Y-%m-%d') AS day,
         SUM(sales_amount) AS monthly_sales
  FROM sales
  GROUP BY day
) t1;

到此這篇關(guān)于MySQL中按月統(tǒng)計(jì)并逐月累加統(tǒng)計(jì)值的幾種實(shí)現(xiàn)寫(xiě)法的文章就介紹到這了,更多相關(guān)MySQL 按月統(tǒng)計(jì)并逐月累加內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • CentOS7下安裝MySQL5.7.39的詳細(xì)過(guò)程

    CentOS7下安裝MySQL5.7.39的詳細(xì)過(guò)程

    這篇文章主要介紹了CentOS7下安裝MySQL5.7.39的詳細(xì)過(guò)程,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-09-09
  • MySQL的一些常用的SQL語(yǔ)句整理

    MySQL的一些常用的SQL語(yǔ)句整理

    這篇文章主要介紹了MySQL的一些常用的SQL語(yǔ)句整理,非常基礎(chǔ),適合隨看隨記:)需要的朋友可以參考下
    2015-07-07
  • MySQL數(shù)據(jù)庫(kù)管理常用命令小結(jié)

    MySQL數(shù)據(jù)庫(kù)管理常用命令小結(jié)

    MySQL數(shù)據(jù)庫(kù)是一種開(kāi)放源代碼的關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng),MySQL數(shù)據(jù)庫(kù)系統(tǒng)使用最常用的數(shù)據(jù)庫(kù)管理語(yǔ)言--結(jié)構(gòu)化查詢(xún)語(yǔ)言(SQL)進(jìn)行數(shù)據(jù)庫(kù)管理,MySQL數(shù)據(jù)庫(kù)管理有它自己獨(dú)特的使用命令,下面為您介紹MySQL數(shù)據(jù)庫(kù)管理常用命令。
    2011-03-03
  • Mysql聯(lián)合查詢(xún)UNION和UNION ALL的使用介紹

    Mysql聯(lián)合查詢(xún)UNION和UNION ALL的使用介紹

    本文詳細(xì)介紹了Mysql的聯(lián)合查詢(xún)命令UNION和UNION ALL,總結(jié)了使用語(yǔ)法和注意事項(xiàng),以及學(xué)習(xí)例子和項(xiàng)目例子,需要的朋友可以參考下
    2014-04-04
  • mysql優(yōu)化limit查詢(xún)語(yǔ)句的5個(gè)方法

    mysql優(yōu)化limit查詢(xún)語(yǔ)句的5個(gè)方法

    這篇文章主要介紹了mysql優(yōu)化limit查詢(xún)語(yǔ)句的5個(gè)方法,它們分別是子查詢(xún)優(yōu)化法、倒排表優(yōu)化法、反向查找優(yōu)化法、limit限制優(yōu)化法和只查索引法,需要的朋友可以參考下
    2014-07-07
  • MySQLexplain之possible_keys、key及key_len詳解

    MySQLexplain之possible_keys、key及key_len詳解

    這篇文章主要介紹了MySQLexplain之possible_keys、key及key_len的用法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-08-08
  • mysql查找字符串函數(shù)的使用

    mysql查找字符串函數(shù)的使用

    這篇文章主要介紹了mysql查找字符串函數(shù)的使用方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-08-08
  • mysql表的四種分區(qū)方式總結(jié)

    mysql表的四種分區(qū)方式總結(jié)

    通俗地講表分區(qū)是將一大表,根據(jù)條件分割成若干個(gè)小表,下面這篇文章主要給大家介紹了關(guān)于mysql表的四種分區(qū)方式,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-04-04
  • MySQL中索引失效場(chǎng)景,原因以及解決方法介紹

    MySQL中索引失效場(chǎng)景,原因以及解決方法介紹

    這篇文章主要為大家詳細(xì)介紹了MySQL中索引失效場(chǎng)景,原因以及解決方法,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2025-07-07
  • MySQL部署后連接被拒絕問(wèn)題的排查與解決方法詳細(xì)指南

    MySQL部署后連接被拒絕問(wèn)題的排查與解決方法詳細(xì)指南

    MySQL是一個(gè)開(kāi)源的、關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng),在開(kāi)發(fā)過(guò)程中被廣泛使用,有時(shí)候我們可能會(huì)遇到MySQL連接不上本地服務(wù)器的問(wèn)題,這篇文章主要介紹了MySQL部署后連接被拒絕問(wèn)題的排查與解決方法,需要的朋友可以參考下
    2025-11-11

最新評(píng)論

沈丘县| 吴旗县| 福贡县| 开化县| 新津县| 阜南县| 富裕县| 兴义市| 滨海县| 滦南县| 施秉县| 庄河市| 来凤县| 华安县| 湖南省| 印江| 乌鲁木齐县| 工布江达县| 开原市| 西平县| 綦江县| 奉化市| 灵宝市| 莱西市| 沈丘县| 镇江市| 磴口县| 嘉祥县| 新丰县| 页游| 改则县| 颍上县| 安国市| 呼伦贝尔市| 涿州市| 拉萨市| 英超| 梧州市| 西畴县| 会同县| 共和县|