Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Selecione n linhas por grupo no mysql


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.