我认为通过提供以下示例可以更好地理解我的问题:
我有一张包含以下数据的表格:
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
==
我希望你得到我的观点/问题?
请帮忙..谢谢!
答案 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