MySQL如何查询qty累计总和不超过10的所有数据行
MySQL累加值筛选查询写法
你之前的写法不生效是因为SUM()属于聚合函数,无法直接在WHERE子句中使用,需要先计算出每行的累积求和结果再做筛选,不同MySQL版本对应写法如下:
MySQL 8.0+ 版本(窗口函数实现)
WITH cumulative_calc AS ( SELECT uid, code, qty, -- 按uid升序累加qty,如需其他排序规则可修改ORDER BY后的字段 SUM(qty) OVER (ORDER BY uid ASC) AS cumulative_total FROM 你的表名 ) SELECT uid, code, qty FROM cumulative_calc -- 若需要累加超过阈值时仍保留触发超限的那行,可替换为 WHERE cumulative_total - qty <= 10 WHERE cumulative_total <= 10;
针对你的样例数据:严格累加值≤10只会返回uid=1的行,如果要符合你预期返回前两行的需求,替换注释中提到的筛选条件即可,此时逻辑为「累加至当前行之前的总和≤10就保留该行」。
MySQL 5.x 及更早版本(用户变量实现)
SELECT uid, code, qty FROM ( SELECT uid, code, qty, @total := @total + qty AS cumulative_total FROM 你的表名, (SELECT @total := 0) AS init_var ORDER BY uid ASC ) AS temp_calc -- 同上面的逻辑,要返回前两行就替换为 WHERE cumulative_total - qty <= 10 WHERE cumulative_total <= 10;
内容的提问来源于stack exchange,提问作者Very Arditya
相关产品推荐
相关产品推荐

