Skip Navigation Links
Novas Tecnologias
Ferramentas Adicionais
Ferramentas Adicionais


Dica No :
1130
Assunto : SQL Server
Titulo: Obtendo os Top N registros em agrupamentos

Gostou do texto ? Vote e dê sua opinião! Pontuação atual :

Translate this page now :






Adicione aos Favoritos!
BlogBlogs Rec6 Linkk Ueba Technorati Delicious DiggIt! StumbleUpon




É uma tarefa muito comum mas nunca foi muito simples de fazer. Com as Window functions, se tornou bem mais simples. Vamos fazer um exemplo utilizando o famoso banco Northwind, obtendo o produto que teve maior valor de venda em cada categoria de produtos.

Essa query vai envolver 2 tabelas : Products e [Order details].


Passo 1 : Obter o total de venda de cada produto


select productid,categoryid, sum(unitprice * quantity) as total
from products a, [order details] b
where a.productid=b.productid
group by categoryid,productid


Passo 2 : Numerar as linhas por categoryId e de forma ordenada pelo total

É neste ponto que entram as window functions, vamos usar o row_number e partitionby

select productid,categoryid, sum(unitprice * quantity) as total,
row_number() over (partition by categoryid order by sum(unitprice * quantity) desc)
from products a, [order details] b
where a.productid=b.productid
group by categoryid,productid


Passo 3 : Filtrar apenas os top n de cada categoria

Para ficar mais elegante, vamos utilizar uma CTE :

with qry (productid,categoryid,total,linha)
as
(select productid,categoryid, sum(unitprice * quantity) as total,
row_number() over (partition by categoryid order by sum(unitprice * quantity) desc) as linha
from products a, [order details] b
where a.productid=b.productid
group by categoryid,productid)

select productid, categoryid, productname, total from qry a, products b
where a.productid=b.productid and linha=1


Neste exemplo estamos filtrando apenas o produto com maiores vendas por categoria, mas poderiamos pegar 2, 3, quantos desejassemos por categoria, bastaria alterar o último where.


Nome :
E-mail:
Comentarios :
 
 
Os Últimos Comentários
data: 1/31/2017 1:10:00 PM
nome: FoDttSbHyXmFfqCCz
email: derby451@hotmail.com
comentário:
sxPzFO http://www.y7YwKx7Pm6OnyJvolbcwrWdoEnRF29pb.com

data: 1/29/2017 11:04:00 AM
nome: MdjiYurcrjeGR
email: derby451@hotmail.com
comentário:
8MWmkT http://www.y7YwKx7Pm6OnyJvolbcwrWdoEnRF29pb.com

data: 1/29/2017 11:01:00 AM
nome: tovFvlIzicf
email: jogcbfn@hotmail.com
comentário:
McP2Pt http://www.y7YwKx7Pm6OnyJvolbcwrWdoEnRF29pb.com

data: 12/30/2016 1:03:00 PM
nome: vxlzrPYdfymiv
email: jfvynms4281rt@hotmail.com
comentário:
sWAidA http://www.FyLitCl7Pf7ojQdDUOLQOuaxTXbj5iNG.com

data: 10/14/2016 7:13:00 PM
nome: CufhlVgMSmaMYCT
email: jimos4581rzt@hotmail.com
comentário:
w5v0fk http://www.FyLitCl7Pf7kjQdDUOLQOuaxTXbj5iNG.com

 1  
Dicas
Dica do Dia
Receba Dicas Por Email
E-mail :  
 


 (help)
Aceito receber informativos do devASPNet, informações de eventos e treinamentos

Veja Quais Informativos Você Receberá

Pesquisar Dicas
Pesquisar Artigos, Dicas e Noticias

Banco de Dados
Algumas Entrevistas
Links Importantes

Búfalo Informática, Treinamento e Consultoria
R. Alvaro Alvim, 37/920 Centro - Cinelândia - Rio de Janeiro Cep: 20031-010
Tel : (21) 2262-1368 (21) 9240-5134 E-mail : Contato@bufaloinfo.com.br