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.