Если SELECT SUM(amount) FROM transactions ORDER BY order LIMIT 0, 50
суммы amount
поле для первых 50 записей в таблице, как делают сумму все записи после первых 50? Другими словами, я хотел бы сделать что-то как SELECT SUM(amount) from transactions ORDER BY order LIMIT 50, *
, но это не работает.
Документация советует использовать невероятно большое число в качестве второго параметра для LIMIT
:
Чтобы получить все строки от определенного смещения до конца набора результатов, вы можете использовать большое число для второго параметра. Этот оператор извлекает все строки с 96-й до последней:
SELECT * FROM tbl LIMIT 95,18446744073709551615;
Вероятно, есть более эффективный способ, но вы можете сначала запустить запрос подсчета, чтобы получить общее количество строк в вашей таблице:
SELECT count(*) FROM transactions
Поместите это в переменную и используйте эту переменную в качестве второго аргумента для LIMIT. Вероятно, вы могли бы сделать это как вложенный запрос mysql.
SELECT SUM(amount)
FROM (
SELECT amount
FROM transactions
ORDER BY
order
LIMIT 50, 1000000000000
) q
Обратите внимание, что ваш оригинальный запрос:
SELECT SUM(amount)
FROM transactions
ORDER BY
order
LIMIT 0, 50
не делает того, что вы, вероятно, думаете. Это синоним:
SELECT a_sum, order
FROM (
SELECT SUM(amount) AS a_sum, order
FROM transactions
) q
ORDER BY
order
LIMIT 0, 50
Внутренний запрос (который обычно не работает в любом другом движке, но работает в MySQL
благодаря синтаксису расширения GROUP BY
) возвращает только 1
запись.
ORDER BY
и LIMIT
затем применяются к этой одной агрегированной записи, а не к записям транзакций
.