Detta kan uppnås med distinct on()
och en anpassad sorteringsdefinition för 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;
Detta föredrar högre rabatt. Om två rabatter är lika, en förmånstyp av ALL
används som tie-breaker.
Onlineexempel:http://rextester.com/TFBP17217