Mysql
 sql >> Base de données >  >> RDS >> Mysql

Sélectionnez n lignes par groupe dans mysql

Vous avez de nombreuses solutions et l'une d'entre elles consiste à utiliser left join et vous pouvez vérifier à ce sujet

select t1.* from test t1
left join test t2
on t1.type = t2.type and t1.price > t2.price
group by t1.variety
having count(*) <=1
order by t1.type,t1.price

La logique est de faire une jointure gauche avec la même table où le type est le même et le prix est inférieur à l'autre et enfin de faire un group by la variété, puis utilisez le count () avec avoir à afficher le nombre d'enregistrements que vous voulez par groupe. Notez que dans mysql, vous avez la liberté d'avoir une clause group by comme dans la requête ci-dessus de manière arbitraire, ce qui peut échouer dans d'autres RDBMS.

Maintenant que vous avez une certaine confusion à propos de l'alias , dans l'exemple ci-dessus, le nom de la table est test et dans la requête un pseudo nom est donné comme t1 . De plus, lorsque vous effectuez une auto-jointure, il est important que vous donniez des noms d'alias uniques pour la même table. Dans l'exemple ci-dessus, la même table est jointe à elle-même, nous devons donc nous assurer que nous donnons un nom d'alias pour les tables.