计算员工数量?
mysql> select count(ename) from emp;
注意:如果count中填的是表达式的话,要加上 or null, 因为 Mysql 中 count() 函数的一般用法是统计字段非空的记录数,利用这个特点来进行条件统计,如果字段是 NULL 就不会统计,但是 false 是会被统计到的
分组函数在使用的时候需要注意哪些?
分组函数自动忽略NULL,你不需要提前对NULL进行处理。
mysql> select sum(comm) from emp;
+
| sum(comm) |
+
| 2200.00 |
+
分组函数中count(*) 和 count(具体字段) 有什么区别?
count(具体字段):表示统计该字段下所有不为NULL的元素的总数。
count(*):统计表当中的总行数。(只要有一行数据count则++)
每一行记录不可能都为NULL(不存在一行全为null的表),一行数据中有一列不为NULL,则这行数据就是有效的。
mysql> select count(*) from emp;
+
| count(*) |
+
| 14 |
+
mysql> select count(comm) from emp;
+
| count(comm) |
+
| 4 |
+
分组函数不能直接使用在where子句中
找出比最低工资高的员工信息。
select ename,sal from emp where sal > min(sal);
表面上意思感觉是没问题,运行一下发现:
ERROR 1111 (HY000): Invalid use of group function
?????????????????????????????????????????????????????????????????????
分组函数在使用的时候必须先进行分组,而分组的group by 执行顺序是在where后的,也就是让分组函数 min 先于分组了,所以会报错
所有的分组函数可以组合起来一起用
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 |