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

MySQL Raggruppa per colonna con 2 righe per ogni gruppo

Se hai bisogno di due ID arbitrari, usa 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 ;

Nota:stai usando un LEFT JOIN e poi aggregando per una colonna nel secondo tavolo. Di solito non è una buona idea, perché le non corrispondenze sono tutte inserite in un NULL gruppo. Inoltre, il tuo WHERE la clausola trasforma il LEFT JOIN a un INNER JOIN comunque, quindi l'ho risolto. Il WHERE clausola può essere o meno necessaria, a seconda che cat_name o meno è sempre NULL .

Se vuoi i due più grandi o più piccoli -- e puoi sopportare di averli nella stessa colonna:

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 ;