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

时间:2012-03-05 02:10:50

标签: mysql product orders

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

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

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美元,付款状态为未付款,用户名为约翰)

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

==  

我希望你得到我的观点/问题?

请帮忙..谢谢!

3 个答案:

答案 0 :(得分:2)

也许这个?

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

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

答案 1 :(得分:2)

几乎完全same question answered here。前提是您需要另一列作为相关客户的运行总计..​​.

我创建的表和模拟数据与您的结果完全相同,并提出了您的确切结果......问题是某种方式MySQL每行应用标准TWICE并且不明白为什么或为什么......我强烈怀疑它一个错误,但无法描述它。无论如何,我有一个强制内部“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

答案 2 :(得分:0)

怎么样:

select *
from `orders`
where paymentstatus='unpaid' and username='john'
having sum(price) <= 20