Masz wiele rozwiązań, a jednym z nich jest użycie left join
i możesz to sprawdzić
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 polega na wykonaniu lewego sprzężenia z tą samą tabelą, w której typ jest taki sam, a cena jest mniejsza od innych, a na koniec wykonaj group by
zmienność, a następnie użyj count() z koniecznością pokazania liczby rekordów, które chcesz na grupę. Zwróć uwagę, że w mysql masz swobodę grupowania według klauzuli, jak w powyższym zapytaniu, w dowolny sposób, co może zawieść w innych RDBMS.
Teraz masz trochę zamieszania co do alias
, w powyższym przykładzie nazwa tabeli to test
a w zapytaniu pseudonazwa jest podana jako t1
. Również przy dołączaniu do siebie ważne jest, aby podać unikalne nazwy aliasów dla tej samej tabeli. W powyższym przykładzie ta sama tabela jest połączona ze sobą, więc musimy upewnić się, że nadaliśmy tabelom nazwę aliasu.