Mysql
 sql >> Database >  >> RDS >> Mysql

Raggruppa MySQL tramite con il join sinistro

Penso che questo potrebbe essere quello che vuoi letteralmente qui:

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);

Dimostrazione

(il tuo aggiornamento Fiddle)

Possiamo usare sottoquery correlate per trovare il massimo user_id e dal secondo al massimo user_id per ogni status_id , quindi ruota ciascuno di questi come due colonne separate. Utilizzando un GROUP_CONCAT potrebbe essere preferibile in questo caso, poiché ti consentirebbe anche di ospitare facilmente un numero qualsiasi di utenti come un elenco CSV.

Inoltre, se stavi utilizzando MySQL 8+ o versioni successive, potremmo sfruttare le funzioni di analisi dei ranghi, il che sarebbe anche più semplice.