-5

我认为通过提供以下示例可以更好地理解我的问题:

我有一张包含以下数据的表格:

orderid  Price username paymentstatus
1        10    john     unpaid
2        10    john     unpaid
4        10    john     unpaid
5        10    john     unpaid
6        10    sam      unpaid
7        10    john     unpaid
8        10    john     paid

我想查找(用户名)john 的所有订单,其中 paymentstatus 为“未付款”且总价格为 <= 20

所以结果应该显示以下 2 行(订单总额为 20 美元,付款状态为未付款,用户名为 john)

EXPECTED RESULT:
==
orderid  Price username paymentstatus
1        10    john     unpaid  
2        10    john     unpaid

==  

我希望你明白我的观点/问题?

请帮忙..谢谢!

4

3 回答 3

2

也许这个?

SELECT *
FROM order_table
WHERE username = 'john' 
AND paymentstatus = 'unpaid'
AND Price <= 20

但鉴于您的标准,我希望结果还包括订单 4、5 和 7。

于 2012-03-05T02:19:17.703 回答
2

这里回答了几乎完全相同的问题。前提是您需要另一列作为相关客户的运行总计..​​.

我创建了与您的结果完全相同的表格和模拟数据,并得出了您的确切结果......问题是MySQL在某种程度上每行应用标准两次并且不明白如何或为什么......我强烈怀疑它是一个错误,但无法形容。无论如何,我确实有一个修复程序,它强制内部“PreQuery”作为基础,并使用 @SQLVars 从其中返回所有记录,然后从中应用 WHERE 子句......

select properSummed.*
   from 
      ( select
              o.orderid, 
              o.price, 
              @RunningTotal := @RunningTotal + o.price as UnpaidSoFar
           from
              orders o, 
              (select @RunningTotal := 0 ) sqlvars
           where o.ownerid = 1
             and o.paymentstatus = 'unpaid' ) properSummed
    where 
       properSummed.UnpaidSoFar <= 50
于 2012-03-05T02:39:06.590 回答
0

那这个呢:

select *
from `orders`
where paymentstatus='unpaid' and username='john'
having sum(price) <= 20
于 2012-03-05T03:28:22.630 回答