Mysql
 sql >> Datenbank >  >> RDS >> Mysql

MYSQL Group by Column mit 2 Zeilen für jede Gruppe

Wenn Sie zwei beliebige IDs benötigen, verwenden Sie min() und 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 ;

Hinweis:Sie verwenden einen LEFT JOIN und dann durch eine Spalte in der zweiten zu aggregieren Tisch. Dies ist normalerweise keine gute Idee, da Nichtübereinstimmungen alle in NULL platziert werden Gruppe. Außerdem Ihr WHERE -Klausel verwandelt den LEFT JOIN zu einem INNER JOIN wie auch immer, also habe ich das behoben. Das WHERE -Klausel kann erforderlich sein oder nicht, je nachdem, ob cat_name oder nicht ist immer NULL .

Wenn Sie die beiden größten oder kleinsten haben möchten – und es ertragen können, sie in derselben Spalte zu haben:

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 ;