Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Mysql group_concat begrenzt Zeilen beim Gruppieren

MySQL macht diese Art von Abfrage nicht einfach, aber eine (zugegebenermaßen nicht sehr schöne) Lösung besteht darin, eine Variable zu verwenden, um jeder Zeile eine Sequenznummer pro Ziel zu geben, und einfach nach der Ganzzahl der Zeilennummer geteilt durch 2 zu gruppieren, um zwei Zahlen zu erhalten jede Gruppe;

SELECT dest, GROUP_CONCAT(port ORDER BY rank) ports
FROM (
  SELECT dest, port, ( 
      CASE dest WHEN @curDest 
                THEN @curRow := @curRow + 1 
                ELSE @curRow := 1 AND @curDest := dest END) rank
  FROM tb_port a
  JOIN tb_rule c ON a.id = c.id_port
  JOIN tb_dest b ON b.id = c.id_dest, 
    (SELECT @curRow := 0, @curDest := '') r
  ORDER BY dest
) z
GROUP BY FLOOR(rank/2),dest
ORDER BY dest, MIN(rank)

Ein SQLfiddle zum Testen .