sql >> Database >  >> RDS >> Mysql

MySQL groeperen op met linker join

Ik denk dat dit is wat je hier letterlijk wilt:

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

(je update Fiddle)

We kunnen gecorreleerde subquery's gebruiken om de max user_id . te vinden en tweede tot max user_id voor elke status_id , en draai ze vervolgens elk uit als twee afzonderlijke kolommen. Een GROUP_CONCAT gebruiken aanpak kan hier de voorkeur hebben, omdat u hiermee ook gemakkelijk een willekeurig aantal gebruikers kunt opnemen als een CSV-lijst.

Als u MySQL 8+ of hoger zou gebruiken, zouden we ook kunnen profiteren van de ranganalysefuncties, wat ook eenvoudiger zou zijn.



  1. hoe vind je alle indexen en hun kolommen voor tabellen, views en synoniemen in oracle

  2. Op zoek naar gegevens tussen haakjes in een string via MYSQL

  3. MySQL ORDER BY rand(), naam ASC

  4. Hoe verander je nummer (7,2) in varchar in orakel?