请考虑以下内容:
SELECT COUNT(*) FROM table;
SELECT COUNT(1) FROM table;
SELECT COUNT(-2) FROM table;
SELECT COUNT(135392) FROM table;
SELECT COUNT(field) FROM table;
SELECT COUNT(field1 + field2) FROM table;
我不清楚expr
的实际作用或用途,因为上述所有SQL语句均返回相同的结果。下面的示例:
+-----------+
| count(..) |
+-----------+
| 54542 |
+-----------+
除了使用expr
符号以外,MySQL的手册(https://dev.mysql.com/doc/refman/8.0/en/counting-rows.html)在*
部分没有涉及太多细节
答案 0 :(得分:2)
COUNT(<expr>)
计算<expr>
得出非{NULL
值的行数。
通常,表达式不需要它,而只能在单个NULL
的列上使用-或由于外部联接而可能为NULL
的列。
答案 1 :(得分:2)
COUNT(*)
将计算所有行COUNT(expr)
是expr
,NOT NULL
将对行进行计数
因此,如果COUNT(expr)
包含NULL值,则COUNT(*)
可能小于expr
:
SELECT COUNT(*), COUNT(1), COUNT(col)
FROM (
SELECT 'a' UNION ALL
SELECT 'b' UNION ALL
SELECT NULL
) AS t(col)
-- 3 3 2
答案 2 :(得分:1)
Expr是表达式的缩写,它本身是“某些有效的sql块,在求值时会导致该行的值唯一”
可能是常量,列,函数调用的结果,变量赋值,case语句等
—equivalent
COUNT(*)
COUNT(1)
COUNT(‘a’)
—count only males. If the group is 1000 in number and 600 are female, this returns 400
COUNT(case when gender = ‘m’ then ‘a’ else null end)
作为其他答案的补充,<expr>
可以可选地以单词DISTINCT开头,在这种情况下,仅计算引用的实体/表达式/功能结果的唯一出现次数
—in a set of 1000 animals, returns 1000
COUNT(gender)
—in a set of 1000 animals, 600 female, returns 2 (only values M and F exist in the group)
COUNT(distinct gender)