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, но я предполагаю, что это не ошибка?
Ответы
Ответ 1
На самом деле ваш запрос работает, и это нормальное поведение. Используя LIMIT
, вы не будете ограничивать счет или сумму, а только возвращаемые строки. Таким образом, ваш запрос вернет строки n
, как указано в вашем предложении LIMIT
. И так как ваш запрос фактически возвращает только одну строку, применение (ненулевого) предела не влияет на результаты.
Однако ваш второй запрос будет работать так, как ожидалось, и является установленным способом решения этой проблемы.