Я бы хотел выбрать лучшие предложения для продавца в PostgreSQL 9.6 по нескольким простым правилам:
- Предложение лучше другого, если его скидка выше независимо от типа выгоды
- Если значения скидок равны, то с типом льготы ALL будет лучше, чем с FOOD
- Если и скидка, и тип льготы совпадают, то можно выбрать любое предложение, например, выбрать первое
Так что лучше всего это не просто вызов max (), а "условный" max (), где нужно проверить и другой столбец, чтобы определить, какая это строка.
Не могли бы вы помочь?
Схема:
create table offer (
id bigserial not null,
discount int4,
benefit_type varchar(25),
...
merchant_id int8 not null
);
Запрос (частичный):
select merchant_id, max(discount) as max_discount
from offer
group by merchant_id;
Примеры предложений в БД:
id discount benefit_type ... merchant_id
0 10 FOOD 0
1 20 FOOD 0
2 20 ALL 0
3 30 ALL 1
4 40 ALL 1
5 40 FOOD 1
6 40 ALL 2
7 50 FOOD 2
Требуемый набор результатов:
merchant_id max_discount benefit_type
0 20 ALL
1 40 ALL
2 50 FOOD
- Лучшее предложение продавца 0 - это предложение 2, потому что 20 ALL> 20 ЕДА.
- Лучшее предложение продавца 1 - это предложение 4, потому что 40 ALL> 30 ALL.
- Лучшее предложение Merchant 2 - это предложение 5, потому что 50 ЕД> 40 ALL.