Страницы

Поиск по вопросам

четверг, 30 мая 2019 г.

Как высчитать скидку?

Всем привет. Есть 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 приклеить по желанию.

Комментариев нет:

Отправить комментарий