sql >> Databáze >  >> RDS >> Mysql

Vyberte n řádků na skupinu v mysql

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.




  1. Kolik dotazů je příliš mnoho?

  2. Jak dále optimalizovat tuto tabulku MySQL pro jeden dotaz

  3. aktualizovat tabulku pomocí dynamicky připravených příkazů

  4. Ukládání XML do databáze pro flexibilní obsah