SELECT user.name, user.subject FROM user INNER JOIN ( SELECT name, COUNT(1) AS occurrences FROM user GROUP BY name ) AS user_occurrences ON user.name = user_occurrences.name ORDER BY user_occurrences.occurrences DESC, user.name ASC, user.subject ASC LIMIT 4
modifica Questo potrebbe funzionare meglio, a seconda dell'RDBMS che stai utilizzando e delle dimensioni del set di dati. Prova entrambi e confronta.
SELECT user.name, user.subject FROM user INNER JOIN user AS user_occurrences ON user.name = user_occurrences.name GROUP BY user.name --, user.subject Second GROUP BY not needed on MySQL, but it should logically be there ORDER BY COUNT(user_occurrences.subject) DESC, user.name ASC, user.subject ASC LIMIT 4