sql >> Base de Datos >  >> RDS >> Mysql

MySQL agrupar por con combinación izquierda

Creo que esto podría ser lo que literalmente quieres aquí:

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

Demostración

(tu actualización Fiddle)

Podemos usar subconsultas correlacionadas para encontrar el user_id máximo y de segundo a máximo user_id para cada status_id , y luego haga girar cada uno de ellos como dos columnas separadas. Usando un GROUP_CONCAT El enfoque podría ser preferible aquí, ya que también le permitiría acomodar fácilmente cualquier número de usuarios como una lista CSV.

Además, si estuviera utilizando MySQL 8+ o superior, podríamos aprovechar las funciones analíticas de clasificación, que también serían más fáciles.