Você tem muitas soluções e uma delas é usar
left join
e você pode verificar sobre isso 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
A lógica é fazer um left join com a mesma tabela onde o tipo é o mesmo e o preço é menor que o outro e por fim fazer um
group by
a variedade e, em seguida, use o count() tendo que mostrar o número de registros que você deseja por grupo. Observe que no mysql você tem a liberdade de ter uma cláusula group by como na consulta acima de forma arbitrária que pode falhar em outros RDBMS. Agora, como você tem alguma confusão sobre o
alias
, no exemplo acima o nome da tabela é test
e dentro da consulta um pseudo nome é dado como t1
. Além disso, quando você faz uma autojunção, é importante fornecer nomes de alias exclusivos para a mesma tabela. No exemplo acima, a mesma tabela é unida a si mesma, portanto, precisamos ter certeza de fornecer algum nome de alias para as tabelas.