Dies kann mit distinct on()
erreicht werden und eine benutzerdefinierte Sortierdefinition für den Leistungstyp:
select distinct on (merchant_id) *
from offer
order by merchant_id,
discount desc,
case when benefit_type = 'ALL' then 1 else 2 end;
Dies bevorzugt einen höheren Rabatt. Wenn zwei Rabatte gleich sind, ein Benefit_Type von ALL
wird als Tie-Breaker verwendet.
Online-Beispiel:http://rextester.com/TFBP17217