Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

MYSQL Group por coluna com 2 linhas para cada grupo


Se você precisar de dois ids arbitrários, use min() e max() :
SELECT c.`cat_name` , min(id), max(id)
FROM `info` i INNER JOIN
     `category` c
     ON i.`cat_id` = c.`cat_id`
WHERE c.`cat_name` IS NOT NULL
GROUP BY c`.`cat_name`
ORDER BY c.`cat_name` ASC ;

Observação:você está usando um LEFT JOIN e, em seguida, agregando por uma coluna no segundo tabela. Isso geralmente não é uma boa ideia, porque as não correspondências são todas colocadas em um NULL grupo. Além disso, seu WHERE cláusula transforma o LEFT JOIN para um INNER JOIN de qualquer forma, então eu consertei isso. O WHERE cláusula pode ou não ser necessária, dependendo se cat_name é sempre NULL .

Se você quiser os dois maiores ou menores - e pode suportar tê-los na mesma coluna:
SELECT c.`cat_name`,
       substring_index(group_concat id order by id), ',', 2) as ids_2 
FROM `info` i INNER JOIN
     `category` c
     ON i.`cat_id` = c.`cat_id`
WHERE c.`cat_name` IS NOT NULL
GROUP BY c`.`cat_name`
ORDER BY c.`cat_name` ASC ;