2013-02-27 136 views
0

只有当ORDER表的匹配is_paid字段不是0000-00-00时,我才需要求和ORDER_ITEMS表中的所有价格字段。基于另一个表字段求和一个表字段

 
ORDER_ITEMS table 
id 
price 

ORDER table 
id 
is_paid 

例如表中的数据是:

 
ORDER_ITEMS 
id price 
1 1.25 
1 0.75 

2 1.25 
2 0.50 
2 2.50 

ORDER 
id is_paid 
1 0000-00-00 
2 2013-02-27 

因此上述数据将返回: ID:2 金额:4.25

因为ID 1没有支付(因此不关心什么价格的总和是)并且id 2被支付,因此我们关心id 2的价格字段的总和是多少。

太感谢你了

+0

为了简单和更好的性能,我建议你存储'NULL'而不是'0000-00-00'。 – Slowcoder 2013-02-27 20:16:14

回答

1

你只需要使用sum()聚合函数和GROUP BY每个订单ID:

select o.id, sum(oi.price) Total 
from orders o 
inner join ORDER_ITEMS oi 
    on o.id = oi.id 
where o.is_paid != '0000-00-00' 
group by o.id 

SQL Fiddle with Demo

0

如果你需要的所有订单它们的总和不是'0000-00-00',从bluefeet的代码中删除“group by”

代码将为 选择o.id,总和从订单(oi.price)总 Ø 内加入ORDER_ITEMS OI 上o.id = oi.id 其中o.is_paid!= '0000-00-00'

如果你需要订单ID明智的总和,bluefeet的代码是正确的。

相关问题