如果SELECT SUM(amount) FROM transactions ORDER BY order LIMIT 0, 50
对amount
表中前50个记录的字段求和,那么如何对前50个记录后的所有记录求和?换句话说,我想做类似的事情SELECT SUM(amount) from transactions ORDER BY order LIMIT 50, *
,但这不起作用.
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
.
文档建议使用令人难以置信的大数字作为第二个参数LIMIT
:
要检索从某个偏移量到结果集末尾的所有行,可以对第二个参数使用一些较大的数字。此语句检索从第 96 行到最后一行的所有行:
Run Code Online (Sandbox Code Playgroud)SELECT * FROM tbl LIMIT 95,18446744073709551615;