“expr”在mysql的count(expr)函数中做什么?

w8biq8rn  于 2021-06-17  发布在  Mysql
关注(0)|答案(3)|浏览(520)

考虑如下:

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 |
+-----------+

mysql手册(https://dev.mysql.com/doc/refman/8.0/en/counting-rows.html)没有详细说明 expr 部分,而不是使用 * 符号

nr7wwzry

nr7wwzry1#

expr是expression的缩写,它本身是“某个有效的sql块的缩写,该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)
omhiaaxx

omhiaaxx2#

COUNT(<expr>) 计算其中的行数 <expr> 计算为非- NULL 价值观。
一般来说,它不需要与表达式一起使用,只用于单个, NULL -可以是列--或者可以是 NULL 由于外部连接。

zbdgwd5y

zbdgwd5y3#

COUNT(*) 将计算所有行 COUNT(expr) 如果 exprNOT NULL 所以呢 COUNT(expr) 可能小于 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

相关问题