15/03/21 用函數進行每年,每月,每周,每日的數據匯總
假設一個銷售明細表 sale_detail 含有 國家(country),銷售時間(sale_time),銷售額(sale_money)..等等
需要用到求和函數 SUM()和分組子句 GROUP BY 按國家和年份分組進行求和匯總(對每一個國家的每一年進行求和)
有兩種語句形式:
每年匯總
1、表格形式例如:
國家 |
年份 |
銷售額 |
巴西 |
2014 |
500000000000 |
方式一:
SELECT S.country as 國家---as 可以省略
to_char(S.sale_time,’YYYY’) as 年份---to_char()字符格式化函數,將時間格式轉換為四位年份,‘YYYY’字符格式顯示
Sum(S.sale_money) as 銷售額---對滿足國家年份條件的金額進行匯總
FROM sale_detail S ---數據源為 sale_detail
WHERE sale_time>=to_date(‘2014-01-01’,’YYYY-MM-DD’) ---to_date()時間格式化函數,講字符轉換為時間格式。用時間范圍的形式確定時間范圍為哪年。
AND sale_time<=to_date(‘2015-01-01,’YYYY-MM-DD’)
GROUP BY S.country,sale_time--- 將WHERE查詢出的數據按國家,時間匯總
HAVING Sum(S.sale_money)>10000000-- 對分組查詢出來的結果進行處理,只選出大於10000000-的數據。
方式二:
SELECT S.country as 國家---as 可以省略
to_char(S.sale_time,’YYYY’) as 年份---to_char()字符格式化函數,將時間格式轉換為四位年份,‘YYYY’字符格式顯示
Sum(S.sale_money) as 銷售額---對滿足國家年份條件的金額進行匯總
FROM sale_detail S ---數據源為 sale_detail
WHERE to_char(sale_time,’YYYY’)=’2014’--to_char()字符轉換格式化函數,將時間格式轉換為字符。查找出含有2014年的數據。
GROUP BY S.country,sale_time--- 將WHERE查詢出的數據按國家,時間匯總
HAVING Sum(S.sale_money)>10000000-- 對分組查詢出來的結果進行處理,只選出大於10000000-的數據。
每月匯總
1、表格形式如下
國家 |
月份 |
銷售額 |
巴西 |
2014/05 |
6000000 |
SELECT S.country as 國家---as 可以省略
to_char(S.sale_time,’YYYY/MM’) as 年份---to_char()字符格式化函數,將時間格式轉換為四位年份,兩位月份,‘YYYY/MM’字符格式顯示
Sum(S.sale_money) as 銷售額---對滿足國家年份條件的金額進行匯總
FROM sale_detail S ---數據源為 sale_detail
WHERE to_char(sale_time,’YYYY’)=’2014’--to_char()字符轉換格式化函數,將時間格式轉換為字符。查找出含有2014年的數據。
GROUP BY S.country,sale_time--- 將WHERE查詢出的數據按國家,時間匯總
ORDER BY S.sale_time
2、表格形式如下:
國家 |
年份 |
月份 |
銷售額 |
巴西 |
2014 |
1 |
600000 |
巴西 |
2015 |
2 |
600000 |
SELECT S.country as 國家---as 可以省略
to_char(S.sale_time,’YYYY’) as 年份
to_char(S.sale_time,’MM’) as 月份---to_char()字符格式化函數,將時間格式轉換為四位年份,兩位月份,‘MM’字符格式顯示
Sum(S.sale_money) as 銷售額---對滿足國家年份條件的金額進行匯總
FROM sale_detail S ---數據源為 sale_detail
WHERE to_char(sale_time,’YYYY’) in (’2014’,’2015’)--to_char()字符轉換格式化函數,將時間格式轉換為字符。查找出含有2014,2015年的數據。
GROUP BY S.country,sale_time--- 將WHERE查詢出的數據按國家,時間匯總
ORDER BY S.country,,S.sale_time