MySQL帮助:如何查找客户的所有订单,直到总和(价格)< = 150并且status ='unpaid'

时间:2011-11-01 03:18:12

标签: mysql

示例:

select orderid
from `orders`
where sum(price) <= 150 and status=unpaid and ownerid=110786

但它不起作用。

详情: 我想查找来自客户(ownerid)的所有订单,其状态为UNPAID,最高为(价格)150。

这是必需的,因为我希望允许客户从可用资金中支付尽可能多的订单。


对于ANSWER No.1 可能会按预期工作,但代码中有一些错误,因为它没有生成所需的结果,当我还添加TotalSoFar以查看值是否正常时,所有行都在此字段中显示其双倍价格而不是最后一列价格+当前列价格值。我不确定我的细节是否有意义,但我只是想说明mysql正在撤回的结果:)

对于答案2 你写了状态而不是paymentstatus所以结果是空白但当我纠正并运行以下查询:

从订单中选择orderid,price,designname,其中paymentstatus ='unpaid',ownerid = 110786 group by orderid,总和(价格)&lt; = 50

RESULT SHOWN IS: 

orderid price   designname 
114279  15  Premier Academy    
114280  10  Troop              
114386  15  Texas Tennis 
114408  20  Nokia Developer   
114508  15  Gold  Lighthouse 

因为你可以看到价格总计不到50美元但是75美元。请帮助...谢谢!

另外Mods请注意stackoverflow是一个很棒的服务,但格式化评论是一项非常艰巨的工作。请以某种方式轻松一点。我尝试了很多次来格式化评论,以便可以轻松阅读,但所有努力都失败了所以现在我正在回答我的问题区域写评论

但是,到目前为止,这个问题没有得到正确回答。虽然好人正在尽力帮助我。我再次重新发布了这个问题,因为太长时间没有人提供可行的解决方案,但新问题也没有得到解决方案的解决方案:)

请伙计们以某种方式帮助我。我想要做的是所有推车以某种方式做的一般事情。如果一个客户有10个订单,每个10美元,总计100美元,但他只有50美元。他如何检查这笔金额可以支付多少订单?这就是我需要查找/编码的全部内容。

2 个答案:

答案 0 :(得分:1)

我认为你可以用MySQL变量完成这个...使用一个作为一个运行总计并应用一个HAVING子句来切断它......

select
      o.orderid,
      o.price,
      @RunningTotal := @RunningTotal + o.price as TotalSoFar
   from
      orders o,
      ( select @RunningTotal := 0 ) sqlvars
   where
          o.ownerid = 110786
      and o.status = unpaid
   having 
      TotalSoFar <= 150

@RunningTotal变量只是不断添加到“即时”中并且卡在查询结果的最后一列中,但仍然只是用于限定WHERE子句的下一条记录的变量。因此,即使您的订单总数高达200,300,无论如何,最终的HAVING子句将通过使用“TotalSoFar”列作为基础来删除所有其他行...

答案 1 :(得分:0)

目前还不清楚你是否收到错误,但试试这个:

select orderid
from `orders`
where status=unpaid and ownerid=110786
group by orderid
having sum(price) <= 150