如何从一个偏移到表的末尾的SUM()?

kei*_*ant 8 mysql sum limit

如果SELECT SUM(amount) FROM transactions ORDER BY order LIMIT 0, 50amount表中前50个记录的字段求和,那么如何对前50个记录的所有记录求和?换句话说,我想做类似的事情SELECT SUM(amount) from transactions ORDER BY order LIMIT 50, *,但这不起作用.

Qua*_*noi 7

SELECT  SUM(amount)
FROM    (
        SELECT  amount
        FROM    transactions
        ORDER BY
                order
        LIMIT 50, 1000000000000
        ) q
Run Code Online (Sandbox Code Playgroud)

请注意您的原始查询:

SELECT  SUM(amount)
FROM    transactions
ORDER BY
        order
LIMIT 0, 50
Run Code Online (Sandbox Code Playgroud)

不会做你认为它做的事情.它是这个的同义词:

SELECT  a_sum, order
FROM    (
        SELECT  SUM(amount) AS a_sum, order
        FROM    transactions
        ) q
ORDER BY
        order
LIMIT   0, 50
Run Code Online (Sandbox Code Playgroud)

内部查询(通常在任何其他引擎中失败但MySQL由于其GROUP BY扩展语法而工作)仅返回1记录.

ORDER BY并且LIMIT然后将其应用于一个聚合记录,没有的记录transactions.

  • @keithjgrant:请注意``ORDER BY`和`LIMIT`是在`SELECT`之后应用的,所以`SUM(金额)FROM事务ORDER BY order LIMIT 0,50`并不是你想象的那样:它与a相同简单`SUM(金额)FROM交易`. (2认同)

Fel*_*ing 2

文档建议使用令人难以置信的大数字作为第二个参数LIMIT

要检索从某个偏移量到结果集末尾的所有行,可以对第二个参数使用一些较大的数字。此语句检索从第 96 行到最后一行的所有行:

SELECT * FROM tbl LIMIT 95,18446744073709551615;
Run Code Online (Sandbox Code Playgroud)