MySQL-按月分組查詢
阿新 • • 發佈:2019-02-17
背景 |
現有如下資料,需要按月進行分組彙總,計算每月各市的總金額。
地區 金額 時間
A市 1000 2017-08-28
A市 2000 2017-08-30
B市 3000 2017-01-03
B市 4000 2017-01-04
C市 5000 2017-01-04
C市 6000 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
C市 11000 2017-01