@TOC
前言
本文主要记录count()操作的相关笔记,在刷SQL题的时候突然发现有人计算记录数时使用了count(1),令我颇为不解,然后就跑去搜,感觉还挺有意思的,写个博文记录一下目前我的理解,目前的结论时count(1)和count(*)用来计算记录数时的效果甚至是速度方面几乎是没有差异的,但是可以对这个count(1)有一个更深的理解。
1. count(*)
select count(*) from table
2. count(1)/count(n)
将数字1作为列统计,实际是自动构造了一个虚拟值为1的列,当然这个值不一定要为1,也可以是任意整数,包括复数也可以。我们可以做个实验,比如直接
select -1,table.* from table
从查询结果可以看到,其实数字可以看作是一个具体的一列,当这个具体的数字放到count()里时就可以把具体的数字当作常量表达式,其实就是对这个常量表达式列进行求count()。count()的结果如下: ```c select count(-1),count(*) from table ``` 结果如下:
# 3. count(list_name) list_name代表列名,此时count()只会统计list_name列的数量(如果不含null值时可以当作在统计行数)。在统计列值时只统计非空列值(不统计NULL)。 # 4. count(expr) expr代表表达式,统计这个表达式有值的结果数,如果值为null则不统计。