sql >> Databasteknik >  >> RDS >> Mysql

MYSQL Gruppera efter kolumn med 2 rader för varje grupp

Om du behöver två godtyckliga ID, använd sedan min() och 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 ;

Obs! Du använder en LEFT JOIN och sedan aggregeras med en kolumn i andra tabell. Detta är vanligtvis inte en bra idé, eftersom alla icke-matchningar placeras i en NULL grupp. Dessutom, din WHERE sats förvandlar LEFT JOIN till en INNER JOIN i alla fall, så det har jag fixat. WHERE klausul kan vara nödvändig eller inte, beroende på om cat_name eller inte är någonsin NULL .

Om du vill ha de två största eller minsta -- och orkar ha dem i samma kolumn:

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 ;


  1. MySqli-kommandon osynkroniserade; du kan inte köra det här kommandot nu

  2. Ladda upp bild med Php och mySQL

  3. Sql Server int vs nvarchar jämförelse på prestanda?

  4. Anslutningssträngparametrar för sparade specifikationer