Всем привет. Есть 3 таблицы - Скидки(Discount), Клиенты(Clients) и Заказы(Orders)
Discount
id_discount count_orders percent_discount
1 5 1,5
2 10 2,5
Clients
id_client Name Surname
1 Ivan Petrov
2 Vasya Vasev
Orders
id order_sum id_client
Вопрос, как посчитать общую сумму, учитывая количество заказов, который сделал клиент? Если общее кол-во заказов 5 и выше, то идет скидка в 1.5%, если 10 и выше, то 2.5%. В противном случае скидки нет.
Заранее спасибо
Ответ
Firebird нет под руками, так что пишу максимально приближенный к стандартам запрос, сработает с высокой вероятностью. Вы не указали к какой конкретно сумме вы хотите применить скидку, поэтому посчитал, что следует выдать все заказы, вычислив для каждого из них сумму со скидкой, с предположением что в данный момент в заказах сумма без скидки.
select O.id,O.id_client,
O.order_sum-(O.order_sum/100*coalesce(D.percent_discount,0))
from Orders O
left join
(select id_client,max(D.count_orders) as d_cnt
from (select id_client,count(1) as cnt from Orders
group by id_client) as C,
Discount as D
where D.count_orders<=cnt
group by id_client) as S
on S.id_client=O.id_client
left join Discount as D
on D.count_orders=S.d_cnt
Подзапрос C выбирает текущие количества заказов по клиентам
К ним клеются все скидки с меньшим или равным количеством
Подзапрос S. Берется количество для скидки для максимально подошедшего кол-ва заказов
По left (т.к. скидки может и не быть) доклеиваются скидки с учетом нужного количества
Таблицу clients приклеить по желанию.
Комментариев нет:
Отправить комментарий