Tienes muchas soluciones y una de ellas es usar left join
y puedes comprobarlo
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 lógica es hacer una combinación izquierda con la misma tabla donde el tipo es el mismo y el precio es menor que el otro y finalmente hacer un group by
la variedad y luego use el conteo () sin tener que mostrar la cantidad de registros que desea por grupo. Tenga en cuenta que en mysql tiene la libertad de tener una cláusula group by como en la consulta anterior de una manera arbitraria que puede fallar en otros RDBMS.
Ahora que tienes cierta confusión sobre el alias
, en el ejemplo anterior, el nombre de la tabla es test
y dentro de la consulta se da un pseudo nombre como t1
. Además, cuando se une a sí mismo, es importante que proporcione nombres de alias únicos para la misma tabla. En el ejemplo anterior, la misma tabla se une consigo misma, por lo que debemos asegurarnos de dar algún nombre de alias para las tablas.