2.集合函数(聚合函数,统计函数)
3.为了有效处理查询得到的数据集合,SQL Server提供了一系列统计函数.
4.这些函数可以实现数据集合和汇总:
avg ([ALL|DISTINCT]列名) 求指定数字字段的平均值
sum ([ALL|DISTINCT]列名) 求指定数字字段的总和
max([ALL|DISTINCT]列名) 求指定数字字段中最大值
min ([ALL|DISTINCT]列名) 求指定数字字段中最小值
count([ALL|DISTINCT]列名) 求满足条件记录中指定字段不为空的记录个数
count(*) 求满足条件记录总数
5.用GROUP BY子句对记录分类统计汇总
格式:
GROUP BY 分组字段名列表[HAVING 条件表达式]
功能:按指定条件对指定字段依次分组进行统计汇总
注:
使用GROUP BY 的语句仍可用ORDER BY子句排序
但必须在GROUP BY之后可以使用别名但不允许对SELECT没指定的列排序
HAVING子句是对分组统计后的查询结果进行筛选.
使用GROUP BY 的select语句仍可用WHERE子句指定条件.
假设原表名为T,统计表(表名为C)为月份、姓名、出勤情况三个字段,那么你每个月要向这个统计表插入一次记录我不知道你这个出勤情况怎么算的,假设为1,0.5,0(全勤,半勤,未出勤)
insert into C values (select to_char(日期,'yymmdd'),姓名,sum(出勤情况) from T where to_char(日期,'yymmdd')='200801' group by 姓名)
那么就得到每个人08年1月的出勤情况了:
月份 姓名 出勤情况
200801 张三 27.5
*************************************************
假设为出勤情况用文字表示,全勤,半勤,未出勤
那么统计表(表名为C)为月份、姓名、出勤情况、次数;那么就要分别插入了。
insert into C values(select col1,col2,col3,col5 from (select to_char(日期,'yymmdd') col1,姓名 col2,出勤情况 col3,姓名||出勤情况 col4,count(*) col5 from T where to_char(日期,'yymmdd')='200801' group by 姓名||出勤情况) temptable)
可以得到:(当然我这里一次插入,也可以分开插入)
月份 姓名 出勤情况 次数
200801 张三 全勤 20
200801 张三 半勤 7
200801 张三 未出勤 4
以上为oracle数据库写法,如果是其他数据库,有些地方可能要调整一下。
有问题请继续补充。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)