Usuário com melhor resposta
Sistema de ranking

Pergunta
-
Olá,
Preciso de ajuda com uma query para fazer um sistema de ranking.
É o seguinte tenho estas tabelas:
Local de Compra: idLocalCompra | LocalCompra
UtilizadorCompras: idUtilizar | idLocalCompra | ...
Como posso fazer? eu acho que é fazer o count com o distinct retornando o idLocalCompra:
retorno (exemplo):
idLocalCompra | Count
3 | 10
1 | 7
2 | 3
Irei precisar desta query não só para este caso, mas também para outros.
Se alguém puder dar uma força agradeço.
Cumpz, ADAE.
Respostas
-
Cometi o mesmo erro nas duas querys... esqueci de adicionar a clausula Group By:
select l.idLocalCompra, l.LocalCompra, count(*) as Qtd from Localcompra as l inner joing UtilizadorCompras as u on u.idLocalCompra = l.idLocalCompra group by l.idLocalCompra, l.LocalCompra order by Qtd desc
select idLocalCompra, count(*) as Qtd from UtilizadorCompras group by idLocalCompra order by Qtd desc
Espero que ajude.
Assinatura: http://www.imoveisemexposicao.com.br
- Marcado como Resposta AD_AE sexta-feira, 14 de junho de 2013 17:19
-
Todas as Respostas
-
Boa tarde,
Experimente mais ou menos dessa forma:
select l.idLocalCompra, l.LocalCompra, count(*) as Qtd from Localcompra as l inner joing UtilizadorCompras as u on u.idLocalCompra = l.idLocalCompra order by Qtd desc
Ou se forem necessárias somente as duas colunas do seu exemplo e não houverem outras condições:
select idLocalCompra, count(*) as Qtd from UtilizadorCompras order by Qtd desc
Espero que ajude.
Assinatura: http://www.imoveisemexposicao.com.br
- Editado gapimex sexta-feira, 14 de junho de 2013 16:49 sugestão adicional
-
Olá,
Quanto tento a primeira query
SELECT l.CodLocalCompra, l.LocalCompra, COUNT(*) AS Qtd FROM Localcompra AS l inner join Colecionador_Disco AS u ON u.CodLocalCompra = l.CodLocalCompra ORDER BY Qtd DESC
é retornado este erro:
Column 'Localcompra.CodLocalCompra' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.
#EDIT: A segunda query retorna o mesmo erro.
Cumpz, ADAE.
- Editado AD_AE sexta-feira, 14 de junho de 2013 17:13
-
Cometi o mesmo erro nas duas querys... esqueci de adicionar a clausula Group By:
select l.idLocalCompra, l.LocalCompra, count(*) as Qtd from Localcompra as l inner joing UtilizadorCompras as u on u.idLocalCompra = l.idLocalCompra group by l.idLocalCompra, l.LocalCompra order by Qtd desc
select idLocalCompra, count(*) as Qtd from UtilizadorCompras group by idLocalCompra order by Qtd desc
Espero que ajude.
Assinatura: http://www.imoveisemexposicao.com.br
- Marcado como Resposta AD_AE sexta-feira, 14 de junho de 2013 17:19
-
Hehe
tinha acabado de conseguir da mesma forma que vc postou:
SELECT lc.CodLocalCompra, lc.LocalCompra, COUNT(*) AS Qtd FROM Localcompra AS lc inner join Colecionador_Disco AS cd ON cd.CodLocalCompra = lc.CodLocalCompra GROUP BY lc.CodLocalCompra, lc.LocalCompra ORDER BY Qtd DESC
Obrigado.
Cumpz, ADAE.
-
-
No SQL Server há algumas funções de ranqueamento que podem ser úteis nesse caso. Em específico duas delas:
> RANK e
> DENSE_RANK.
Segue código usando uma das funções:select dense_rank() over (order by Qtd desc) as [Posição], LC.LocalCompra from (select idLocalCompra, count(*) as Qtd from UtilizadorCompras group by idLocalCompra) as UC inner join [Local de Compra] as LC on LC.idLocalCompra=UC.idLocalCompra order by Posição, LC.LocalCompra;
Belo Horizonte, MG - Brasil
Olá,
Sua query não funciona corretamente, mas obrigado à mesma.
Ela está retornando a posição sempre com 1, e mostrando os locais pelo ordem de inserção.
Cumpz, ADAE.
-
-
-