none
COMANDO SQL - SQL TOP RRS feed

  • Pergunta

  • Bom dia,

    Tenho uma tabela onde gravo o nome do candidato, o seu partido e a quantidade de votos    recebidos

    Para selecionar os dados dos melhores classificados em ordem votos executo o comando abaixo:

    SELECT TOP 20 nomeCandidato, nomePartido, votos

    FROM votacao

    ORDER BY votos asc

    Gostaria de saber, como exibo, por exemplo, em que posição ficou determinado candidato?

    Obrigado

    Dilson

    terça-feira, 14 de outubro de 2014 12:17

Respostas

  • OK - Willima,

    Mas se eu quiser exibir  a posição em que ficou o candidato x, somente, por exemplo?

    Dilson

    Dilson,

    Adicione esta consulta indicada pelo William em um CTE e então use uma cláusula WHERE. Segue o complemento do script:

     

    WITH Candidatos AS (
    SELECT TOP 20 nomeCandidato, nomePartido, votos,
    RANK() OVER (ORDER BY votos asc) as posicao FROM votacao ORDER BY votos asc ) SELECT * FROM Candidatos WHERE nomeCandidato = 'José da Silva'

    Não esqueça de marcar como resposta todos os posts que ajudaram na solução !

    Abraços,

    Durval Ramos
    Microsoft Partner | MTA | MCSA - SQL Server 2012 | MCSE - Data Platform
    ----------------------------------
    Se foi resolvido clique "Marcar como resposta" e se foi útil "Votar como Útil"

    terça-feira, 14 de outubro de 2014 13:06
    Moderador
  • Deleted
    terça-feira, 14 de outubro de 2014 13:54
  • Use o metodo RANK

    http://msdn.microsoft.com/pt-br/library/ms176102.aspx

    exemplo:

    SELECT TOP 20 nomeCandidato, nomePartido, votos, RANK() OVER (ORDER BY votos asc) as posicao
    FROM votacao
    ORDER BY votos asc

    att


    William John Adam Trindade
    Analyste-programmeur
    ----------------------------------------------------------

    • Sugerido como Resposta Mr. GMSOFT terça-feira, 14 de outubro de 2014 12:32
    • Marcado como Resposta Ricardo Barbosa Cortes terça-feira, 14 de outubro de 2014 18:01
    terça-feira, 14 de outubro de 2014 12:30

Todas as Respostas

  • Use o metodo RANK

    http://msdn.microsoft.com/pt-br/library/ms176102.aspx

    exemplo:

    SELECT TOP 20 nomeCandidato, nomePartido, votos, RANK() OVER (ORDER BY votos asc) as posicao
    FROM votacao
    ORDER BY votos asc

    att


    William John Adam Trindade
    Analyste-programmeur
    ----------------------------------------------------------

    • Sugerido como Resposta Mr. GMSOFT terça-feira, 14 de outubro de 2014 12:32
    • Marcado como Resposta Ricardo Barbosa Cortes terça-feira, 14 de outubro de 2014 18:01
    terça-feira, 14 de outubro de 2014 12:30
  • OK - Willima,

    Mas se eu quiser exibir  a posição em que ficou o candidato x, somente, por exemplo?

    Dilson

    terça-feira, 14 de outubro de 2014 12:55
  • Nao entendi.. voce pode me dar um exemplo do que vc quer fazer?

    Pelas informaçoes que vc nos deu, eu imagino que vc tenha algo como

    Jose   2000 Votos PPP  1

    Maria 1000 votos PIP   2

    Ana   950  votos  PAP  3

    ZeGuede  50 votos POP 4

    Att


    William John Adam Trindade
    Analyste-programmeur
    ----------------------------------------------------------


    terça-feira, 14 de outubro de 2014 12:58
  • OK - Willima,

    Mas se eu quiser exibir  a posição em que ficou o candidato x, somente, por exemplo?

    Dilson

    Dilson,

    Adicione esta consulta indicada pelo William em um CTE e então use uma cláusula WHERE. Segue o complemento do script:

     

    WITH Candidatos AS (
    SELECT TOP 20 nomeCandidato, nomePartido, votos,
    RANK() OVER (ORDER BY votos asc) as posicao FROM votacao ORDER BY votos asc ) SELECT * FROM Candidatos WHERE nomeCandidato = 'José da Silva'

    Não esqueça de marcar como resposta todos os posts que ajudaram na solução !

    Abraços,

    Durval Ramos
    Microsoft Partner | MTA | MCSA - SQL Server 2012 | MCSE - Data Platform
    ----------------------------------
    Se foi resolvido clique "Marcar como resposta" e se foi útil "Votar como Útil"

    terça-feira, 14 de outubro de 2014 13:06
    Moderador
  • Deleted
    terça-feira, 14 de outubro de 2014 13:54
  • Boa tarde,

    Só para complementar, também pode ser o caso de remover a clausula Top (e com isso o Order By após o From), pois acredito que podem existir mais de um candidato com a mesma quantidade de votos (ex: 3 candidatos na vigésima posição).

    Espero que seja útil.


    Assinatura: http://www.imoveisemexposicao.com.br

    terça-feira, 14 de outubro de 2014 15:23
  • Bom dia,

    Apenas um complemento nas respostas que foram dadas é caso ocorra um empate  na votação os registros que estiverem empatado serão descartados o que é errado já que houve um empate, por isso, indico que também use a clausula  WITH TIES.

    Exemplo:

    SELECT TOP(20) WITH TIES CAMPO1, CAMPO2 FROM TABELA ORDER BY CAMPO1 DESC;

    Link's úteis:

    http://msdn.microsoft.com/pt-BR/library/ms189463.aspx

    http://www.diegonogare.net/2012/07/aprimorando-o-resultado-da-consulta-com-top-with-ties-no-sql-server-2012/

    Atenciosamente,

    Ruberlei.


    Atenciosamente, Ruberlei. www.t-sql.com.br

    sábado, 18 de outubro de 2014 12:15