如何查询并显示记录,直到达到一定数量?
假设您要选择学生,直到学生的总金额达到1000?
Student ID Student Name Student Money
--------- ----------- --------------
1 John 190
2 Jenny 290
3 Ben 200
4 Andy 120
5 Lynna 300
Run Code Online (Sandbox Code Playgroud)
如果我想在500点停下来,我会得到1号和2号记录(190 + 290).如果我想在1000停止,我将获得记录1直到4.
在寻找我自己的答案时遇到了这个问题。我想我会在这里留下我的解决方案,因为这是完成相同任务的另一种方式,并且可能更有效。诀窍是使用自连接>=
SELECT s1.ID, s1.name, s1.money, sum(s2.money) as accumulator
FROM student s1
INNER JOIN student s2 ON s1.id >= s2.id
GROUP BY s1.id HAVING accumulator <= 500;
Run Code Online (Sandbox Code Playgroud)
SQL 表没有“内在”顺序,因此您必须指定一些 ORDER BY 子句来赋予“until”短语任何含义。鉴于此,可以通过 SELECT SUM(money) FROM Student ORDER BY xxx LIMIT N 获得“前”N 条记录的总和。使用具有自然顺序整数的辅助表 INTS,您可以找到最大的合适值N 通过类似的东西:
SELECT MAX(N) FROM INTS
WHERE (SELECT SUM(money) FROM student ORDER BY xxx LIMIT N) < 1000
Run Code Online (Sandbox Code Playgroud)
最后将其作为 LIMIT 子句的另一个嵌套 SELECT 插入整个 SELECT 中。不过,所有这些听起来效率都相当低!通常,当嵌套 SELECT 看起来太多且太慢时,另一种方法是分步骤执行此操作:首先使用“渐进求和”构建一个临时表,然后使用它来帮助您找到所需的限制。