一、count()函数
1、count(*)
把所有的行数都查询出来,除非该行中所有的数据为null
SELECT
COUNT(*)
FROM
employees
结果:107
2、count(commission_pct)
把指定列中所有的行数查出来,只要一行为null,那就不计数
SELECT
COUNT(commission_pct)
FROM
employees
结果: 35
3、count(1)
相当于新开了一列,其中所有数据为1,统计为1的行数
SELECT
COUNT(1)
FROM
employees
结果:107
二、count()应用
1、count(*)或count(id)或coun(1)—共有多少用户?
SELECT count(*) from user;
2、count(id) —求2班和4班的人数
SELECT count(id) FROM user u WHERE u.clazz in (2, 4);
3、求2班和4班占总人数的百分比
-
方法一: 2班和4班的人数 / 总人数 (2段SQL)
SELECT
(SELECT count(id) FROM user u WHERE u.clazz IN (2, 4)) / (SELECT count(id) FROM user u);
-
方法二:一段SQL写出来
(1)count(clazz)—clazz不为null的个数
clazz有一个为null值,count(clazz)结果为14
SELECT count(clazz) FROM user;
(2)count(clazz=2 OR NULL)——查出2班的人数
count(clazz=2 OR NULL)表示clazz为2的显示,不为2的置为null——查出2班的人数为3
SELECT count(clazz=2 OR NULL) FROM user;
(3)count(clazz=2 OR clazz=4 OR NULL)——查出2班和4班的人数
count(clazz=2 OR clazz=4 OR NULL)表示clazz为2或者4的显示,其余的置为null ——查出2班和4班的人数为8
SELECT count(clazz=2 OR clazz=4 OR NULL) FROM user;
(4)拿第3小问的结果除以总人数count(1),即可得到百分比
SELECT
count(clazz=2 OR clazz=4 OR NULL) / count(1)
FROM user;
三、count+group by
1、count(*) + group by
相当于把所有同一个job_id(如AD_VP)的归为一类,并计数(共有多少个AD_VP)。
四、count+distinct去重
SELECT
count(DISTINCT clazz)
FROM
user;
只有4个班级:1班、2班、3班和4班