sql >> Databasteknik >  >> RDS >> Mysql

MySQL-grupp av med vänster gå med

Jag tror att det här kan vara vad du bokstavligen vill ha här:

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

Vi kan använda korrelerade underfrågor för att hitta max user_id och näst högsta user_id för varje status_id , och snurra sedan var och en av dem som två separata kolumner. Använder en GROUP_CONCAT tillvägagångssätt kan vara att föredra här, eftersom det också skulle göra det möjligt för dig att enkelt ta emot valfritt antal användare som en CSV-lista.

Dessutom, om du använde MySQL 8+ eller senare, skulle vi kunna dra fördel av de rankanalytiska funktionerna, vilket också skulle vara enklare.



  1. Släpp en roll med privilegier

  2. Hibernate + orakelsekvens + trigger

  3. MySQL:Välj data från en tabell där datumet infaller i den aktuella veckan och den aktuella månaden

  4. Spring Data JPA + Hibernate Hoppa över låsta rader (PostgreSQL)