1. 程式人生 > >MySQL-按月分組查詢

MySQL-按月分組查詢

背景


  現有如下資料,需要按月進行分組彙總,計算每月各市的總金額。

地區  金額       時間

A市  1000    2017-08-28
A市  2000    2017-08-30
B市  3000    2017-01-03
B市  4000    2017-01-04
C5000    2017-01-04
C6000    2017-01-05
解決方案

  分組查詢,首先想到的是使用 Group By 結合聚合函式 SUM() 來完成統計。

SELECT 
    area,
    SUM(money),
    releaseDate
FROM datatable
GROUP BY area,releaseDate

  不過這樣的話,查詢到的並不是我們想要的結果,因為表中的日期是精確到了日,只有同年同月同日的資料才會被彙總到一起,我們的目標是精確到月,那麼就要把“年月日”轉換為“年月”。

SELECT 
    area,
    SUM(money),
    CONCAT(YEAR(releaseDate),'-',MONTH(releaseDate)) AS releaseYearMonth
FROM datatable
GROUP BY area,releaseYearMonth
  • 使用 Year()、Month()函式分別獲取釋出日期的年份和月份

  • 使用 Concat()函式把年份和月份通過“-”重新連線起來

  • 通過新得到的日期(精確到月份)重新分組

  可能有些同學會遇到包含中文“年月日”的資料,如:2017年01月01日。這樣的日期字串直接按照上面的方式處理可能會出現Null值錯誤。可以檢視我的另一篇文章:MySQL-日期字串(*年月*日 格式)轉Date型別

地區  金額       時間

A市  3000    2017-08
B市  7000    2017-01
C11000   2017-01