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