MySQL không làm cho loại truy vấn này dễ dàng, nhưng một giải pháp (phải thừa nhận là không hay lắm) là sử dụng một biến để cung cấp cho mỗi hàng một số thứ tự cho mỗi đích và chỉ nhóm theo số nguyên của hàng chia cho 2 để có hai số trong mỗi nhóm;
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)