sql >> Database teknologi >  >> RDS >> Mysql

Mysql group_concat begrænser rækker i gruppering

MySQL gør ikke denne form for forespørgsel let, men en (ganske vist ikke særlig smuk) løsning er at bruge en variabel til at give hver række et sekvensnummer pr. dest og bare gruppere efter rækkenummeret heltal divideret med 2 for at få to tal i hver 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)

En SQLfiddle at teste med .



  1. Find skæringspunkter mellem rækker og tidsstempler i en mysql db

  2. Sum over værdier efter måned i millisekunder

  3. Mysql sum-forespørgsel returnerer forkert resultat ved brug af flere joinforbindelser

  4. Log hver MySQL-forespørgsel til en fil ved at aktivere General Log in MAMP