在開發和數據分析中,我們常常需要對數據進行季度統計,MySQL 提供了很多方法來實現這個目標。
首先,我們可以使用 GROUP BY 和 DATE_FORMAT 函數來分組和格式化日期:
SELECT DATE_FORMAT(date, '%Y-Q%q') AS quarter, SUM(sales) AS sales FROM sales_table GROUP BY quarter;
這個查詢會將數據按季度分組,并計算每個季度的銷售額。使用 DATE_FORMAT 函數將日期格式化為類似 2019-Q1 的形式,使查詢結果更加易讀。
如果我們需要將每個季度的數據與前一季度進行比較,我們可以使用 MySQL 的 WINDOW 函數來實現:
SELECT DATE_FORMAT(date, '%Y-Q%q') AS quarter, SUM(sales) AS sales, SUM(sales) OVER ( ORDER BY DATE_FORMAT(date, '%Y-%m-%d') ROWS BETWEEN 1 PRECEDING AND 1 PRECEDING ) AS prev_quarter_sales FROM sales_table GROUP BY quarter;
這個查詢使用 SUM 函數計算每個季度的銷售額,并使用 WINDOW 函數計算前一季度的銷售額。ROWS BETWEEN 1 PRECEDING AND 1 PRECEDING 表示計算前一行的銷售額,ORDER BY 子句指定按日期排序。
最后,我們可以使用 MySQL 的 PIVOT 表示法來將季度數據轉換為按年份和季度分組的表格:
SELECT year, SUM(IF(quarter = 1, sales, 0)) AS q1_sales, SUM(IF(quarter = 2, sales, 0)) AS q2_sales, SUM(IF(quarter = 3, sales, 0)) AS q3_sales, SUM(IF(quarter = 4, sales, 0)) AS q4_sales FROM ( SELECT YEAR(date) AS year, QUARTER(date) AS quarter, sales FROM sales_table ) AS t GROUP BY year;
這個查詢使用 IF 函數將每個季度的銷售額轉換為數據表格中的多個列,從而實現按年份和季度分組的目標。