Questo può essere ottenuto usando distinct on()
e una definizione di ordinamento personalizzata per benefit_type:
select distinct on (merchant_id) *
from offer
order by merchant_id,
discount desc,
case when benefit_type = 'ALL' then 1 else 2 end;
Questo preferisce uno sconto maggiore. Se due sconti sono uguali, un tipo_beneficio di ALL
è usato come spareggio.
Esempio online:http://rextester.com/TFBP17217