Mysql
 sql >> база данни >  >> RDS >> Mysql

Групиране на MySQL с ляво присъединяване

Мисля, че това може да е това, което буквално искате тук:

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

Демо

(вашата актуализация Fiddle)

Можем да използваме корелирани подзаявки, за да намерим максималния user_id и втори до макс user_id за всеки status_id и след това завъртете всяка от тях като две отделни колони. Използване на GROUP_CONCAT Подходът може да е за предпочитане тук, тъй като също така ще ви позволи лесно да приспособите произволен брой потребители като CSV списък.

Също така, ако използвате MySQL 8+ или по-висока, тогава бихме могли да се възползваме от функциите за анализ на ранга, което също би било по-лесно.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Включване на заглавки при използване на SELECT INTO OUTFILE?

  2. използвайки mysql_close()

  3. Заредете MySQL innodb база данни в паметта

  4. find() на модел дава id като низ в една среда и int в друга

  5. MySQL LEFT JOIN 3 таблици