1 2 3 4 5 6 7 8 9 |
计数 : count 求和 : sum 平均值 : avg 最小值 : min 最大值 : max 注意: 分组函数在使用的时候必须先进行分组,然后才能用。 如果你没有对数据进行分组,整张表默认为一组。 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
//所有记录 mysql> select * from emp; +-------+--------+-----------+------+------------+---------+---------+--------+ | EMPNO | ENAME | JOB | MGR | HIREDATE | SAL | COMM | DEPTNO | +-------+--------+-----------+------+------------+---------+---------+--------+ | 7369 | SMITH | CLERK | 7902 | 1980-12-17 | 800.00 | NULL | 20 | | 7499 | ALLEN | SALESMAN | 7698 | 1981-02-20 | 1600.00 | 300.00 | 30 | | 7521 | WARD | SALESMAN | 7698 | 1981-02-22 | 1250.00 | 500.00 | 30 | | 7566 | JONES | MANAGER | 7839 | 1981-04-02 | 2975.00 | NULL | 20 | | 7654 | MARTIN | SALESMAN | 7698 | 1981-09-28 | 1250.00 | 1400.00 | 30 | | 7698 | BLAKE | MANAGER | 7839 | 1981-05-01 | 2850.00 | NULL | 30 | | 7782 | CLARK | MANAGER | 7839 | 1981-06-09 | 2450.00 | NULL | 10 | | 7788 | SCOTT | ANALYST | 7566 | 1987-04-19 | 3000.00 | NULL | 20 | | 7839 | KING | PRESIDENT | NULL | 1981-11-17 | 5000.00 | NULL | 10 | | 7844 | TURNER | SALESMAN | 7698 | 1981-09-08 | 1500.00 | 0.00 | 30 | | 7876 | ADAMS | CLERK | 7788 | 1987-05-23 | 1100.00 | NULL | 20 | | 7900 | JAMES | CLERK | 7698 | 1981-12-03 | 950.00 | NULL | 30 | | 7902 | FORD | ANALYST | 7566 | 1981-12-03 | 3000.00 | NULL | 20 | | 7934 | MILLER | CLERK | 7782 | 1982-01-23 | 1300.00 | NULL | 10 | +-------+--------+-----------+------+------------+---------+---------+--------+ |
1 2 3 4 5 6 7 8 |
//最大值 : max //找出最高工资? mysql> select max(sal) from emp; +----------+ | max(sal) | +----------+ | 5000.00 | +----------+ |
1 2 3 4 5 6 7 8 |
//最小值 : min //找出最低工资? mysql> select min(sal) from emp; +----------+ | min(sal) | +----------+ | 800.00 | +----------+ |
1 2 3 4 5 6 7 8 9 |
//求和 : sum //计算工资和 mysql> select sum(sal) from emp; +----------+ | sum(sal) | +----------+ | 29025.00 | +----------+ |
1 2 3 4 5 6 7 8 |
//平均值 : avg //计算平均工资 mysql> select avg(sal) from emp; +-------------+ | avg(sal) | +-------------+ | 2073.214286 | +-------------+ |
1 2 3 4 5 6 7 8 |
//计数 : count //计算员工数量? mysql> select count(ename) from emp; +--------------+ | count(ename) | +--------------+ | 14 | +--------------+ |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 |
//分组函数在使用的时候需要注意哪些? //第一点:分组函数自动忽略NULL,你不需要提前对NULL进行处理。 mysql> select sum(comm) from emp; +-----------+ | sum(comm) | +-----------+ | 2200.00 | +-----------+ mysql> select count(comm) from emp; +-------------+ | count(comm) | +-------------+ | 4 | +-------------+ mysql> select avg(comm) from emp; +------------+ | avg(comm) | +------------+ | 550.000000 | +------------+ //第二点:分组函数中count(*)和count(具体字段)有什么区别? mysql> select count(*) from emp; +----------+ | count(*) | +----------+ | 14 | +----------+ mysql> select count(comm) from emp; +-------------+ | count(comm) | +-------------+ | 4 | +-------------+ //count(具体字段):表示统计该字段下所有不为NULL的元素的总数。 //count(*):统计表当中的总行数。(只要有一行数据count则++) //因为每一行记录不可能都为NULL,一行数据中有一列不为NULL,则这行数据就是有效的。 //第三点:分组函数不能够直接使用在where子句中。 //找出比最低工资高的员工信息。 select ename,sal from emp where sal > min(sal); //表面上没问题,运行一下? ERROR 2013 (HY000): Lost connection to MySQL server during query ? //说完分组查询(group by)之后就明白了了。 //第四点:所有的分组函数可以组合起来一起用。 mysql> select sum(sal),min(sal),max(sal),avg(sal),count(*) from emp; +----------+----------+----------+-------------+----------+ | sum(sal) | min(sal) | max(sal) | avg(sal) | count(*) | +----------+----------+----------+-------------+----------+ | 29025.00 | 800.00 | 5000.00 | 2073.214286 | 14 | +----------+----------+----------+-------------+----------+ |