Ceci peut être réalisé en utilisant distinct on()
et une définition de tri personnalisé pour le 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;
Cela préfère une remise plus élevée. Si deux remises sont identiques, un Benefit_type de ALL
est utilisé comme condition de départage.
Exemple en ligne :http://rextester.com/TFBP17217