Подтвердить что ты не робот

MySQL COUNT с LIMIT

Что я хочу сделать, это SUM столбца, но также COUNT количество строк, которое он суммирует, с лимитом не более 5 строк. Поэтому мой запрос:

SELECT COUNT(*), SUM(score) FROM answers WHERE user=1 LIMIT 5

То, что я ожидал, было COUNT (*) до 5 (я не могу предположить, что в моей кодовой логике всегда будет 5, так как это может иметь менее 5 ответов), с суммой оценки до 5 строк.

Вместо того, что я, кажется, вернусь, это общее количество совпадающих строк (где пользователь равно 1) как счетчик и сумма оценки для этих строк. Цифры не меняют ли я LIMIT 1 или LIMIT 5 или даже LIMIT 50.

То, что я считаю, будет работать в этой ситуации, это вместо этого

SELECT COUNT(*), SUM(score) FROM (SELECT * FROM answers WHERE user=1 LIMIT 5) AS a

Но это кажется немного запутанным для такого простого запроса, и поскольку он в высоком трафике script, он не будет максимально реалистичным.

Мне что-то не хватает? Я нашел этот отчет об ошибках несколько лет назад, который, похоже, связан с этой "проблемой" http://bugs.mysql.com/bug.php?id=50005, но я предполагаю, что это не ошибка?

4b9b3361

Ответ 1

На самом деле ваш запрос работает, и это нормальное поведение. Используя LIMIT, вы не будете ограничивать счет или сумму, а только возвращаемые строки. Таким образом, ваш запрос вернет строки n, как указано в вашем предложении LIMIT. И так как ваш запрос фактически возвращает только одну строку, применение (ненулевого) предела не влияет на результаты.

Однако ваш второй запрос будет работать так, как ожидалось, и является установленным способом решения этой проблемы.