Что делает "expr" в функции COUNT (expr) MySQL? - PullRequest
0 голосов
/ 28 ноября 2018

Рассмотрим ниже:

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, за исключением использования символа *

Ответы [ 3 ]

0 голосов
/ 28 ноября 2018
  • COUNT(*) будет считать все строки
  • COUNT(expr) будет считать строку, если expr равно NOT NULL

Так что COUNT(expr) может быть меньшечем COUNT(*), если expr содержит значения NULL:

SELECT COUNT(*), COUNT(1), COUNT(col)
FROM (
    SELECT 'a' UNION ALL
    SELECT 'b' UNION ALL
    SELECT NULL
) AS t(col)

-- 3    3    2
0 голосов
/ 28 ноября 2018

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)
0 голосов
/ 28 ноября 2018

COUNT(<expr>) подсчитывает количество строк, где <expr> оценивается как не NULL значения.

Как правило, оно не требуется для выражения и будет использоваться только для одного, NULL -able столбец - или столбец, который может быть NULL из-за внешнего соединения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...