MySql 查询指定字段的数据累加到指定值停止并返回结果应该怎么写?

数据表如下:

id name value
1 乔峰 30
2 段誉 50
3 虚竹 40
4 紫嫣 20

指定值:$sum = 100

id 正序排列字段,从第一条记录的 value 开始累加, id=1valueid=2value … 直到累加的值大于等于 $sum 结束查询并返回结果。

以上数据表正确的查询结果集返回的是 1,2,3 3条记录。

我第一时间想到的是用 for 循环来查询,但这也太憨了,MYSQL 学的不好,还希望大家不吝赐教,非常感谢。

悲观者永远正确,乐观者永远前行。
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
最佳答案

建议你分页批量查,比如,一次查100条(这个数据量不算多,相比你查100次,性能好的多),然后通过程序进行统计,如果总和不够,就继续查下一页,查到够为止。当然,你应当避免太多次的查询,所以一页查多少条,你根据自己业务去评估。

3年前 评论
讨论数量: 8

@Latent
@LiamHao

呼叫大佬 🤞

3年前 评论

建议你分页批量查,比如,一次查100条(这个数据量不算多,相比你查100次,性能好的多),然后通过程序进行统计,如果总和不够,就继续查下一页,查到够为止。当然,你应当避免太多次的查询,所以一页查多少条,你根据自己业务去评估。

3年前 评论

@忆往昔弹指间 好的,这个思路不错,我试着写一下,感谢~

3年前 评论

你这个需求没法用简单的一个SQL解决,@忆往昔弹指间 大佬的方式挺好,兼顾需求与效率,我也学习了。

3年前 评论

@LiamHao 嗯嗯,我昨天想了一下,确实是我想简单了

3年前 评论

建议你分页批量查,使用chunk

3年前 评论
SELECT id,name,value,total_value FROM
(
    SELECT id,name,value,@total := @total + value AS 'total_value' FROM 
    (select id,name,value from google_uac_placement order by id asc) AS temp,
    (SELECT @total := 0) AS T1
    ORDER BY id ASC
) AS a
WHERE total_value <= 100;
3年前 评论
sreio

楼上老哥获取条数和楼主不一致,我改了一下 @wqggym :+1:

SELECT id, name, value, total_value
FROM (
    SELECT id, name, value
        , @total := @total + value AS "total_value"
    FROM (
        SELECT id, name, value
        FROM google_uac_placement
        ORDER BY id ASC
    ) temp, (
            SELECT @total := 0
        ) T1
    ORDER BY id ASC
) a
WHERE total_value - `value` < 100;
3年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!