“ expr”在MySQL的COUNT(expr)函数中起什么作用?

时间:2018-11-28 19:02:03

标签: mysql sql database count

请考虑以下内容:

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)在*部分没有涉及太多细节

3 个答案:

答案 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)