Complete worked example
sql
WITH ranked AS (SELECT id,company_id,salary,ROW_NUMBER() OVER
(PARTITION BY company_id ORDER BY CASE WHEN salary IS NULL THEN 1 ELSE 0 END,salary DESC,id) AS rn
FROM roles WHERE active=1)
SELECT c.id,r.id AS role_id,r.salary FROM companies c
LEFT JOIN ranked r ON r.company_id=c.id AND r.rn=1 ORDER BY c.id;- Reasoning
- The ranking gives at most one selected active role to each retained company.