MySQL tidak membuat kueri semacam ini mudah, tetapi satu (diakui tidak terlalu cantik) solusi adalah dengan menggunakan variabel untuk memberikan setiap baris nomor urut per tujuan dan hanya mengelompokkan dengan bilangan bulat nomor baris dibagi 2 untuk mendapatkan dua nomor di setiap kelompok;
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)