大家好,又见面了,我是你们的朋友全栈君。
一、group by 的意思为分组汇总。
使用了group by 后,要求Select出的结果字段都是可汇总的,否则就会出错。
group by 有一个原则,就是 select 后面的所有列中,没有使用聚合函数的列,必须出现在 group by 后面。
比如,有:{学号,姓名,性别,年龄,成绩}字段
这样写:
SELECT 学号,姓名,性别,年龄,sum(成绩)
FROM 学生表
GROUP BY 学号
就是错的,因为 “姓名、性别、年龄”未被汇总,且不一定是单一。
这样写:
SELECT MAX(学号),MAX(姓名),MAX(性别),MAX(年龄),sum(成绩)
FROM 学生表
GROUP BY 学号
是对的,汇总出每一同学号学生的总成绩。注意的是,只要学号相同,别的如果有不同,取它们值最大的一条作为显示输出。
这样写:
SELECT 学号,姓名,性别,年龄,sum(成绩)
FROM 学生表
GROUP BY 学号,姓名,性别,年龄
这样写也是对的,但注意的是,学号,姓名,性别,年龄中,只要有一个不同,就会当成另一条记录来汇总。
二、什么是聚合函数?
什么是聚合函数(aggregate function)?
聚合函数对一组值执行计算并返回单一的值。
聚合函数有什么特点?
- 除了 COUNT 以外,聚合函数忽略空值。
- 聚合函数经常与 SELECT 语句的 GROUP BY 子句一同使用。
- 所有聚合函数都具有确定性。任何时候用一组给定的输入值调用它们时,都返回相同的值。
- 标量函数:只能对单个的数字或值进行计算。主要包括字符函数、日期/时间函数、数值函数和转换函数这四类。
常见的聚合函数有哪些?
1、求个数/记录数/项目数等:count()
例如: 统计员工个数?
select count( ) from Company --包括空值 select count(*) from Company --不包括空值
2、求某一列平均数 :avg()
例如:求某个班平均成绩 ?求某个公司员工的平均工资?
select avg(score) from Scores ---平均成绩 select avg(salary) from Company --平均工资
注意:
若某行的score值为null时,计算平均值时会忽略带有null值得那一行。
如果想要把null当做0,那么可以使用IsNull函数把null转换成0,语法如下:
avg(IsNull(score,0)) as ’Average Score‘
3、求总和,总分等:sum() –必须为数字列
例如:求某个班的总成绩?求公司总薪资支出?
select sum(score) from Scores select sum(salary) from Company
4、求最大值,最高分,最高工资等:max()
例如:求班里最高分,公司员工最高工资?
select max(Score) from Scores select max(salary) from Company
5、求最小值,最低分,最低工资等:max()
例如:求班里最低分,公司员工最低工资?
select min(Score) from Scores select min(salary) from Company
聚合函数怎么正确的使用?
- 1、 select 语句的选择列表(子查询或外部查询);
- 2、having 子句;
- 3、compute 或 compute by 子句中等;
注意: 在实际应用中,聚合函数常和分组函数group by结合使用,用来查询.where 子句的作用对象一般只是行,用来作为过滤数据的条件。
其他聚合函数(aggregate function)
6、 count_big()返回指定组中的项目数量。
与count()函数区别:count_big()返回bigint值,而count()返回的是int值。
数据类型详见:
例如:
select count_big(prd_no) from sales
7、 grouping()产生一个附加的列。
当用cube或rollup运算符添加行时,输出值为1;
当所添加的行不是由cube或rollup产生时,输出值为0.
例如:
select prd_no,sum(qty),grouping(prd_no) from sales group by prd_no with rollup
8、binary_checksum() 返回对表中的行或表达式列表计算的二进制校验值,用于检测表中行的更改。
例如:
select prd_no,binary_checksum(qty) from sales group by prd_no
9、checksum_agg() 返回指定数据的校验值,空值被忽略。
例如:
select prd_no,checksum_agg(binary_checksum(*)) from sales group by prd_no
10、checksum() 返回在表的行上或在表达式列表上计算的校验值,用于生成哈希索引。
11、stdev()返回给定表达式中所有值的统计标准偏差。
例如:
select stdev(prd_no) from sales
12、stdevp() 返回给定表达式中的所有值的填充统计标准偏差。
例如:
select stdevp(prd_no) from sales
13、 var() 返回给定表达式中所有值的统计方差。
例如:
select var(prd_no) from sales
14、 varp()返回给定表达式中所有值的填充的统计方差。
例如:
select varp(prd_no) from sales
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/141378.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...