Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

MySQL group by com left join


Eu acho que isso pode ser o que você literalmente quer aqui:
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);



Demonstração

(seu violino de atualização)

Podemos usar subconsultas correlacionadas para encontrar o máximo user_id e user_id do segundo ao máximo para cada status_id e, em seguida, gire cada uma delas como duas colunas separadas. Usando um GROUP_CONCAT A abordagem pode ser preferível aqui, pois também permitiria acomodar facilmente qualquer número de usuários como uma lista CSV.

Além disso, se você estivesse usando o MySQL 8+ ou superior, poderíamos aproveitar as funções analíticas de classificação, o que também seria mais fácil.