jey_val_star
@jey_val_star
Программист

Как сделать запрос SQL лучше?

Есть таблица orders (заказы), с полями:
price - стоимость заказа
delivery_price - стоимость доставки
delivery_type - тип доставки (самовывоз, курьер, курьер +5 км...)

Ещё есть таблица transactions (транзакции) - на 1 заказ может быть несколько транзакций (например выбрали самовывоз, оплатили сразу на сайте, а потом поменяли на доставку. А доставка стоит денег)

Поля
order_id - id заказа
price - стоимость в одну транзакцию (думаю что понятно это)

Нужно получить
- все неоплаченные заказы
- все оплаченные заказы

Запрос делаю так
...
/* Все оплаченные*/
where orders.price+orders.delivery_price = (select sum(price) from transactions where order_id = orders.id group by order_id) as transactions_price


Может есть более элегантный способ получить нужные заказы?
И можно ли как-то избавиться от delivery_price оставив только delivery_type?
  • Вопрос задан
  • 58 просмотров
Решения вопроса 1
rozhnev
@rozhnev
Fullstack programmer, DBA, медленно, дорого
Вот запрос оплаченных заказов:
select *
from orders
join (
	select order_id, sum(price) paid
    from transactions 
    group by order_id
) paiments on 
	paiments.order_id = orders.id and 
	(orders.price + orders.delivery_price) =< paiments.paid;


MySQL fiddle

Для не оплаченных:
select *
from orders
left join (
	select order_id, sum(price) paid
    from transactions 
    group by order_id
) paiments on 
	paiments.order_id = orders.id 
where (orders.price + orders.delivery_price) > coalecse(paiments.paid, 0);
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы