これは、distinct on()
を使用して実現できます。 および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;
これはより高い割引を好みます。 2つの割引が同じ場合、benefit_typeはALL
タイブレーカーとして使用されます。
オンラインの例: http://rextester.com/TFBP17217