Isso pode ser feito usando
distinct on()
e uma definição de classificação personalizada para o tipo de benefício:select distinct on (merchant_id) *
from offer
order by merchant_id,
discount desc,
case when benefit_type = 'ALL' then 1 else 2 end;
Isso prefere desconto maior. Se dois descontos forem iguais, um benefício_type de
ALL
é usado como desempate. Exemplo online:http://rextester.com/TFBP17217