sql >> Databasteknik >  >> RDS >> Mysql

Mysql group_concat begränsa rader i gruppering

MySQL gör inte den här typen av frågor lätt, men en (visserligen inte särskilt snygg) lösning är att använda en variabel för att ge varje rad ett sekvensnummer per dest och bara gruppera med radnumret heltal dividerat med 2 för att få två tal i varje grupp;

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)

En SQLfiddle att testa med .



  1. Infoga i tabellen från Array PHP

  2. SQL Server AlwaysOn ( Tillgänglighetsgrupp ) Arkitektur och steg för steg installation -4 Lägg till och ta bort databas steg

  3. Hur SQLite Ifnull() fungerar

  4. Python, Brew och MySQLdb