Страницы

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

воскресенье, 8 марта 2020 г.

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

#sql #firebird #interbase


Всем привет. Есть 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%.
В противном случае скидки нет.
Заранее спасибо
    


Ответы

Ответ 1



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

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

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