SQL 计算行数,计算一个表的总行数,或者计算某列中值的个数。例如,希望知道员工总数和各部门的员工人数。
SQL 计算行数 问题描述
计算一个表的总行数,或者计算某列中值的个数。例如,希望知道员工总数和各部门的员工人数。
SQL 计算行数 解决方案
当计算整个表的总行数时,只需要使用 COUNT
函数和符号 *
即可。
1 select count(*)
2 from emp
COUNT(*)
----------
14
如果把数据分为多组,就需要使用 COUNT
函数和 GROUP BY
子句。
1 select deptno, count(*)
2 from emp
3 group by deptno
DEPTNO COUNT(*)
---------- ----------
10 3
20 5
30 6
SQL 计算行数 扩展知识
计算各部门的员工人数的时候,我们就是在对数据进行分组。每多一个员工,则总数加一,最终会计算出各个部门的员工人数。本例使用了 SQL 做聚合运算,因为重点关注的不是诸如某个员工的工资或职位这样的详细信息,而是各个部门的员工人数。注意,当把列名称作为参数的时候,COUNT
函数会忽略 Null
。使用符号 *
或者常量参数的时候,就会包含 Null
,考虑下面的例子。
select deptno, comm
from emp
DEPTNO COMM
---------- ----------
20
30 300
30 500
20
30 1300
30
10
20
10
30 0
20
30
20
10
select count(*), count(deptno), count(comm), count('hello')
from emp
COUNT(*) COUNT(DEPTNO) COUNT(COMM) COUNT('HELLO')
---------- ------------- ----------- --------------
14 14 4 14
select deptno, count(*), count(comm), count('hello')
from emp
group by deptno
DEPTNO COUNT(*) COUNT(COMM) COUNT('HELLO')
---------- ---------- ----------- --------------
10 3 0 3
20 5 0 5
30 6 4 6
如果参数列的值都为 Null
,或者表里没有任何数据,COUNT
函数就会返回 0
。请注意,即使 SELECT
子句里只有聚合函数,我们仍然可以按照其他列对表中的数据进行分组,如下所示。
select count(*)
from emp
group by deptno
COUNT(*)
----------
3
5
6
注意,尽管 DEPTNO
不存在于 SELECT
列表里,我们仍然按照该列进行分组。把用于分组的列放入 SELECT
子句通常有助于提高可读性,但这并不是必需的。反之,如果某列被放入了 SELECT
列表,那么我们就必须保证它也存在于 GROUP BY
子句里。