Máte mnoho řešení a jedním z nich je použít left join
a můžete si to ověřit
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
Logika je provést levé spojení se stejnou tabulkou, kde je typ stejný a cena nižší než u druhé, a nakonec provést group by
variity a poté použijte count() s tím, že musíte ukázat počet záznamů, které chcete na skupinu. Všimněte si, že v mysql máte svobodu mít skupinu podle klauzule jako ve výše uvedeném dotazu libovolným způsobem, který může selhat v jiných RDBMS.
Nyní máte nějaké nejasnosti ohledně alias
, ve výše uvedeném příkladu je název tabulky test
a v dotazu je pseudonázev zadán jako t1
. Také když se připojíte sami, je důležité, abyste stejné tabulce dali jedinečné názvy aliasů. Ve výše uvedeném příkladu je stejná tabulka spojena sama se sebou, takže se musíme ujistit, že tabulkám zadáme nějaký alias.