Как СУММИРОВАТЬ () от смещения до конца таблицы?

Если SELECT SUM(amount) FROM transactions ORDER BY order LIMIT 0, 50 суммы amount поле для первых 50 записей в таблице, как делают сумму все записи после первых 50? Другими словами, я хотел бы сделать что-то как SELECT SUM(amount) from transactions ORDER BY order LIMIT 50, *, но это не работает.

8
задан keithjgrant 12 April 2010 в 17:02
поделиться

3 ответа

Документация советует использовать невероятно большое число в качестве второго параметра для LIMIT :

Чтобы получить все строки от определенного смещения до конца набора результатов, вы можете использовать большое число для второго параметра. Этот оператор извлекает все строки с 96-й до последней:

 SELECT * FROM tbl LIMIT 95,18446744073709551615; 
 
2
ответ дан 5 December 2019 в 15:21
поделиться

Вероятно, есть более эффективный способ, но вы можете сначала запустить запрос подсчета, чтобы получить общее количество строк в вашей таблице:

SELECT count(*) FROM transactions

Поместите это в переменную и используйте эту переменную в качестве второго аргумента для LIMIT. Вероятно, вы могли бы сделать это как вложенный запрос mysql.

2
ответ дан 5 December 2019 в 15:21
поделиться
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 затем применяются к этой одной агрегированной записи, а не к записям транзакций.

7
ответ дан 5 December 2019 в 15:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: