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

MySQL gruppe af med venstre join

Jeg tror, ​​at det måske er det, du bogstaveligt talt ønsker her:

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

Demo

(din opdateringsviolon)

Vi kan bruge korrelerede underforespørgsler til at finde det maksimale user_id og næst-til-maks user_id for hver status_id , og drej derefter hver af dem ud som to separate kolonner. Brug af en GROUP_CONCAT tilgang kan være at foretrække her, da den også giver dig mulighed for nemt at rumme et hvilket som helst antal brugere som en CSV-liste.

Desuden, hvis du brugte MySQL 8+ eller nyere, så kunne vi drage fordel af de rank analytiske funktioner, som også ville være nemmere.



  1. Returnerer sæt rækker fra plpgsql-funktionen.

  2. Er der en grund til ikke at bruge <=> (null safe er lig med operator) i mysql i stedet for =?

  3. Sådan overføres en tabelværdiparameter fra C# til Oracles lagrede procedure

  4. Laravel veltalende Ignorer hylster