Hai molte soluzioni e una di queste è usare left join
e puoi verificarlo
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 logica è fare un join sinistro con la stessa tabella in cui il tipo è lo stesso e il prezzo è inferiore all'altro e infine eseguire un group by
la varietà e quindi utilizzare count() dovendo mostrare il numero di record desiderati per gruppo. Nota che in mysql hai la libertà di avere una clausola group by come nella query sopra in un modo arbitrario che potrebbe non riuscire in altri RDBMS.
Ora che hai un po' di confusione sull'alias
, nell'esempio sopra il nome della tabella è test
e all'interno della query viene dato uno pseudo nome come t1
. Inoltre, quando fai un self join, è importante dare nomi alias univoci per la stessa tabella. Nell'esempio sopra la stessa tabella è unita a se stessa, quindi dobbiamo assicurarci di dare un nome alias per le tabelle.