Использование COUNT возвращает разные результаты

Я запрашиваю таблицу в моей базе данных;

  1. Определите последнее значение video_seek
  2. Вернуть общее количество строк

Я не эксперт по SQL и не могу понять, почему использование COUNT в операторе SQL возвращает разные результаты по сравнению с оператором, который не использует COUNT.


Запрос:

SELECT video_seek, COUNT(*) AS total 
FROM videos 
WHERE video_id = 1 
  AND video_seek > 0 
  AND video_seek_end > 0 
ORDER BY video_seek DESC 
LIMIT 1

Возвращает:

video_seek = 6012
total      = 199

Запрос:

SELECT video_seek 
FROM videos 
WHERE video_id = 1 
  AND video_seek > 0 
  AND video_seek_end > 0 
ORDER BY video_seek DESC 
LIMIT 1

Возвращает:

video_seek = 7098

Сумма верна, но video_seek нет, и я не знаю, почему результат отличается в зависимости от того, используется ли COUNT.

Любой совет будет принята с благодарностью.

2 ответа

Решение

Это особенность MySQL. Если бы вы использовали любую другую СУБД, вы бы получили синтаксическую ошибку "отсутствует выражение GROUP BY".

COUNT () является агрегатной функцией, что означает, что она объединяет несколько строк в одну. Если у вас нет GROUP BY Это означает, что вы хотите объединить все совпадающие строки в одну, поэтому не имеет смысла показывать значения из отдельной строки. Как я уже сказал, другие движки баз данных просто предупредят вас об ошибке; Вместо этого MySQL просто выбирает данные из произвольной строки (даже не случайной).

Я ничего не знаю о ваших данных или бизнес-логике, но...

SELECT MAX(video_seek) AS max_video_seek, COUNT(*) AS total
FROM videos
WHERE video_id = 1
AND video_seek > 0
AND video_seek_end > 0

(Обратите внимание, что SQL-код допускает разрывы строк.)

Вы должны использовать GROUP BY для подсчета, чтобы получить правильные решения

Другие вопросы по тегам