【问题标题】:MySQL help: How to find all orders from a customer till sum(price) <= 150 and status='unpaid'MySQL 帮助:如何查找客户的所有订单,直到 sum(price) <= 150 和 status='unpaid'
【发布时间】:2011-11-01 03:18:11
【问题描述】:

例子:

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

但是没有用。

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

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


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

对于 ANSWER No.2 你写了 status 而不是 paymentstatus 所以结果是空白的,但是当我纠正它并运行以下查询时:

从 paymentstatus='unpaid' 和 ownerid=110786 的订单中选择 orderid、price、designname 按具有 sum(price)

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 是一项很棒的服务,但格式化 cmets 是一项非常艰巨的工作。请以某种方式让它变得容易。我尝试了太多次以易于阅读的方式格式化 cmets,但所有努力都失败了,所以现在我正在编写 cmets 以回答我的问题区域

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

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

【问题讨论】:

  • 如果“unpaid”是一个字符串,你可能需要引号
  • 它给了你什么?一个错误?错误的数据集?

标签: mysql


【解决方案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 变量只是不断地添加到“on-the-fly”中,并停留在查询结果的最后一列中,但仍然作为符合 WHERE 子句的下一条记录的变量。因此,即使您的订单总数达到 200、300 等等,最终的 HAVING 子句也会通过使用“TotalSoFar”列作为基础来删除所有其他行...

【讨论】:

  • 以上两个答案没有按要求工作:(请帮助。
  • @HaiderAbbas,怎么不工作...在 SQL 中崩溃?不正确的结果?你能展示一些你所拥有的与结果的样本数据吗?不工作就像说我需要一块石头,却不描述我需要什么样的石头。
【解决方案2】:

不清楚您是否遇到错误,但试试这个:

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

【讨论】:

  • 非常感谢您的帮助,但它既没有给出任何错误,也没有显示任何内容。只是一个空白的 orderid 字段。请指教。
  • 当您尝试“从 ownerid=110786 且 status=unpaid 的订单中选择 *”时会得到什么?
  • 你写了 status 而不是 paymentstatus 所以结果是空白的,但是当我更正我运行时: select orderid, price, designname from orders where paymentstatus='unpaid' and ownerid=110786 group by orderid总和(价格)
  •  你写的是 status 而不是 paymentstatus 所以结果是空白的但是当我更正我跑的时候: select orderid, price, designname from orders where paymentstatus='unpaid' and ownerid=110786按具有 sum(price) 
  • 请更新您的原始帖子 - 在 cmets 中很难阅读此内容
猜你喜欢
  • 2012-03-22
  • 2022-07-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-16
  • 2016-03-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多