如何用SQL進行數據庫表的小計與總計計算?ROLLUP功能詳解
當前位置:點晴教程→知識管理交流
→『 技術文檔交流 』
在數據分析中,常常需要進行數據的匯總和聚合分析。 之前的文章中已經介紹了聚合函數、開窗函數、group by語句等方法來實現數據表的聚合分析。接下來,我們將使用MySQL和PostgreSQL這兩個常見的關系型數據庫,來演示如何在SQL中使用ROLLUP實現數據庫表的小計和總計計算。 示例數據: 首先,我們創建一個簡單的sales表,并插入一些數據。 -- 建表 CREATE TABLE sales ( year INT, quarter INT, amount DECIMAL(10, 2) );
-- 插入數據 INSERT INTO sales VALUES (2021, 1, 100), (2021, 2, 150), (2021, 3, 200), (2021, 4, 250), (2022, 1, 120), (2022, 2, 180), (2022, 3, 220), (2022, 4, 270);
-- 數據表如下: SELECT * FROM Sales ; 數據表如下: 01 MySQL中的ROLL UP以下查詢按年份和季度對銷售額進行匯總,并使用ROLLUP生成各級別的匯總。 SELECT year, quarter, SUM(amount) as total_amount FROM Sales GROUP BY year, quarter WITH ROLLUP ; 結果如下: 當使用ROLLUP時,任何被GROUP BY的列都可能在結果集中出現NULL值,這表示該列的匯總值。上面的示例中,2021年所有季度的匯總值為700,2022年所有季度的匯總值為790,所有年份的匯總值為1490。 若要將NULL換成小計或者總計,可以結合COALESCE函數,見如下SQL示例: SELECT COALESCE( year,'總計') as year, COALESCE( quarter,'小計') as quarter, SUM(amount) as total_amount FROM sales GROUP BY year, quarter WITH ROLLUP ; 結果如下: 02 PostgreSQL中的ROLL UPPostgreSQL也支持ROLLUP,但其語法略有不同。在PostgreSQL中,你需要在GROUP BY子句后使用ROLLUP()函數。 SELECT year, quarter, SUM(amount) as total_amount FROM Sales GROUP BY ROLLUP(year, quarter) ORDER BY year,quarter ; 結果如下,和MySQL的結果一致: 若要將NULL換成小計或者總計,可以結合COALESCE函數。這里要注意的是需要將year和quarter字段轉換為字符串類型,SQL如下: SELECT COALESCE(year::text,'總計') AS year, COALESCE(quarter::text,'小計') AS quarter, SUM(amount) as total_amount FROM sales GROUP BY ROLLUP(year, quarter) ORDER BY year,quarter ; 若不轉換為字符串類型,會報如下錯誤: 查詢結果如下: 在實踐中,根據實際需求和數據庫類型,可以使用相應的語法來實現 ROLL UP 功能,并根據結果進行進一步的數據分析和報表制作。 該文章在 2024/3/14 9:12:37 編輯過 |
關鍵字查詢
相關文章
正在查詢... |