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

MYSQL Gruppér efter kolonne med 2 rækker for hver gruppe

Hvis du har brug for to vilkårlige id'er, så brug min() og 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 ;

Bemærk:Du bruger en LEFT JOIN og derefter aggregere efter en kolonne i anden bord. Dette er normalt ikke en god idé, fordi ikke-matches alle placeres i en NULL gruppe. Ydermere er din WHERE klausul ændrer LEFT JOIN til en INNER JOIN i hvert fald, så det har jeg rettet. WHERE klausul kan være nødvendig eller ikke, afhængigt af om cat_name eller ej er nogensinde NULL .

Hvis du vil have de to største eller mindste -- og kan tåle at have dem i samme kolonne:

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. Hvordan sætter man en streng foran en kolonneværdi i MySQL?

  2. Ved dublet nøgle ignorere?

  3. Forøgelse af ydeevnen ved at bruge Læs Skriv-opdeling af databasetrafik med Moodle 3.9

  4. T-SQL:Afrund til nærmeste 15 minutters interval