Mysql
 sql >> Datenbank >  >> RDS >> Mysql

MySQL gruppiert nach mit linker Verknüpfung

Ich denke, das könnte das sein, was Sie hier buchstäblich wollen:

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

(Ihr Update-Fiddle)

Wir können korrelierte Unterabfragen verwenden, um die maximale user_id zu finden und die zweitgrößte user_id für jede status_id , und drehen Sie dann jede davon als zwei separate Spalten aus. Verwenden eines GROUP_CONCAT Ansatz wäre hier vielleicht vorzuziehen, da man damit auch beliebig viele Nutzer problemlos als CSV-Liste unterbringen könnte.

Wenn Sie MySQL 8+ oder höher verwenden, könnten wir außerdem die Ranganalysefunktionen nutzen, was ebenfalls einfacher wäre.