求和直到某一点 - MySql

hen*_*nry 7 mysql sum

如何查询并显示记录,直到达到一定数量?

假设您要选择学生,直到学生的总金额达到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.

sre*_*mer 5

在寻找我自己的答案时遇到了这个问题。我想我会在这里留下我的解决方案,因为这是完成相同任务的另一种方式,并且可能更有效。诀窍是使用自连接>=

    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)


Ale*_*lli 2

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 看起来太多且太慢时,另一种方法是分步骤执行此操作:首先使用“渐进求和”构建一个临时表,然后使用它来帮助您找到所需的限制。