sql >> Database >  >> RDS >> Mysql

MYSQL Groeperen op kolom met 2 rijen voor elke groep

Als je twee willekeurige id's nodig hebt, gebruik dan min() en 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 ;

Let op:je gebruikt een LEFT JOIN en vervolgens aggregeren door een kolom in de tweede tafel. Dit is meestal geen goed idee, omdat niet-overeenkomsten allemaal worden geplaatst in een NULL groep. Verder is uw WHERE clausule verandert de LEFT JOIN naar een INNER JOIN in ieder geval, dus dat heb ik opgelost. De WHERE clausule kan al dan niet nodig zijn, afhankelijk van het feit of cat_name is ooit NULL .

Als je de twee grootste of kleinste wilt -- en het kan verdragen om ze in dezelfde kolom te hebben:

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. tijdstempel naar datum converteren in java

  2. MySQL-foutcode:1305. FUNCTION JSON_EXTRACT bestaat niet in MySQL-clientversie:5.5.52

  3. SQL Server, een benoemd exemplaar converteren naar een standaardexemplaar?

  4. Kan record niet in SQLite-database invoegen vanuit Firebase Message Service wanneer de app op de achtergrond of gesloten is