Mysql
 sql >> Base de données >  >> RDS >> Mysql

Grouper MySQL par avec jointure à gauche

Je pense que c'est peut-être ce que vous voulez littéralement ici :

SELECT DISTINCT
    status_id,
    (SELECT MAX(user_id) FROM comments c2 WHERE c1.status_id = c2.status_id) user_1,
    (SELECT user_id FROM comments c2 WHERE c1.status_id = c2.status_id
     ORDER BY user_id LIMIT 1 OFFSET 1) user_2
FROM comments c1
WHERE user_id IN (2,3);

Démo

(votre mise à jour Fiddle)

Nous pouvons utiliser des sous-requêtes corrélées pour trouver le maximum user_id et deuxième au maximum user_id pour chaque status_id , puis divisez chacun de ceux-ci en deux colonnes distinctes. Utiliser un GROUP_CONCAT Cette approche pourrait être préférable ici, car elle vous permettrait également de gérer facilement n'importe quel nombre d'utilisateurs sous forme de liste CSV.

De plus, si vous utilisiez MySQL 8+ ou une version ultérieure, nous pourrions tirer parti des fonctions d'analyse de classement, ce qui serait également plus facile.