14 分组函数?
14 分组函数?
count 计数
sum 求和
avg 平均值
max 最大值
min 最小值
记住:所有的分组函数都是对“某一组”数据进行操作的。
找出工资总和?
select sum(sal) from emp;
+----------+
| sum(sal) |
+----------+
| 29025.00 |
+----------+
找出最高工资?
select empno,ename,max(sal) from emp;
+-------+-------+----------+
| empno | ename | max(sal) |
+-------+-------+----------+
| 7369 | SMITH | 5000.00 |
+-------+-------+----------+
找出最低工资?
select empno,ename,min(sal) from emp;
+-------+-------+----------+
| empno | ename | min(sal) |
+-------+-------+----------+
| 7369 | SMITH | 800.00 |
+-------+-------+----------+
找出平均工资?
select round(avg(sal),2) from emp;
+-------------------+
| round(avg(sal),2) |
+-------------------+
| 2073.21 |
+-------------------+
找出总人数?
select count(empno) from emp;
+--------------+
| count(empno) |
+--------------+
| 14 |
+--------------+
分组函数一共有5个,分组函数还有另一个名字:多行处理函数。
多行处理函数的特点:输入多行,最终输出结果是一行。
分组函数自动忽略null。
select count(comm) from emp;
+-------------+
| count(comm) |
+-------------+
| 4 |
+-------------+
select sum(comm) from emp where comm is not null;// 不需要额外添加这个过滤条件。sum函数自动忽略null。
找出工资高于平均工资的员工?
select avg(sal) from emp; // 平均工资
+-------------+
| avg(sal) |
+-------------+
| 2073.214286 |
+-------------+
select ename,sal from emp where sal > avg(sal);// ERROR 1111 (HY000): Invalid use of group function
思考以上的错误信息:无效的使用了分组函数?
原因:sql语句当中有一个语法规则,分组函数不可直接使用在where子句当中。why???
怎么解释?
因为group by是在where执行之后才会执行的。
select
... 5
from
... 1
where
... 2
group by
... 3
having
... 4
order by
... 6
count(*) 和 count(具体的某个字段),他们有什么区别?
找出工资高于平均工资的员工?
第一步:找出平均工资
select avg(sal) from emp;
+-------------+
| avg(sal) |
+-------------+
| 2073.214286 |
+-------------+
第二步:找出高于平均工资的员工
select ename,sal from emp where sal > 2073.214286;
+-------+---------+
| ename | sal |
+-------+---------+
| JONES | 2975.00 |
| BLAKE | 2850.00 |
| CLARK | 2450.00 |
| SCOTT | 3000.00 |
| KING | 5000.00 |
| FORD | 3000.00 |
+-------+---------+
子查询:
select ename,sal from emp where sal > (select avg(sal) from emp);
+-------+---------+
| ename | sal |
+-------+---------+
| JONES | 2975.00 |
| BLAKE | 2850.00 |
| CLARK | 2450.00 |
| SCOTT | 3000.00 |
| KING | 5000.00 |
| FORD | 3000.00 |
+-------+---------+