2013-02-27 2 views
0

Мне нужно суммировать все поля цены в таблице ORDER_ITEMS только тогда, когда поле поиска is_paid таблицы ORDER не 0000-00-00.SUM одно табличное поле на основе поля других таблиц

 
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 2 оплачивается, поэтому мы заботимся о том, какова сумма ценовых полей id 2.

спасибо большое

+0

Я предлагаю вам хранить 'NULL' вместо' 0000-00-00' для простоты и лучшей производительности. – Slowcoder

ответ

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», удалите «группу по» из кода синефета

код будет выбрать o.id, сумма (oi.price) Весь от заказов о внутреннем соединении order_items О.И. на o.id = oi.id где o.is_paid! = '0000-00-00'

если вам нужно указать id id мудрой суммы, код синефета правильный.

Смежные вопросы