WITH users AS ( SELECT * FROM ( VALUES ('Dennis'), ('Lam') ) AS _ (user_id) ) SELECT track_id, name, artist FROM track JOIN ( SELECT track_id FROM user_track JOIN suser USING (user_id) JOIN track USING (track_id) JOIN lobby USING (lobby_id) WHERE suser.user_name IN (SELECT * FROM users) GROUP BY track_id HAVING COUNT(track_id) = (SELECT COUNT(*) FROM users) ORDER BY EXP(SUM(LN(score))) DESC ) AS _ USING (track_id) ;