Pular para o conteúdo principal

Consulta Top-N Oracle

Esse tipo de consulta é útil em situações onde precisamos encontrar, por exemplo, os N maiores ou menores dentro de determinado grupo, os funcionários mais bem pagos, os que vendem mais, as mercadorias menos vendidas e assim por diante.
Para conseguirmos isso no Oracle precisaremos implementar uma consulta interna (ou view em linha), que irá retornar todos os registros necessários, e na consulta externa iremos limitar a exibição num total desejado.
Baixe aqui o script com a criação da tabela e os inserts para o teste.
No exemplo abaixo desejamos encontrar os três funcionários que ganham mais:
SELECT NOME, SALARIO
FROM
(
SELECT FU.NOM_FUNC
NOME, FU.SAL_FUNC SALARIO
FROM FUNCIONARIOS FU

ORDER BY FU.SAL_FUNC DESC
)

WHERE ROWNUM <= 3


Agora desejamos encontrar os três funcionários que possuem os menores salários:
SELECT NOME, SALARIO
FROM
(
SELECT FU.NOM_FUNC
NOME, FU.SAL_FUNC SALARIO
FROM FUNCIONARIOS FU
ORDER BY FU.SAL_FUNC
)
WHERE ROWNUM <=
3


Podemos perceber que a consulta interna é muito parecida em ambos os exemplos, mudamos apenas a ordem em que os registros seriam retornados, e na consulta externa definimos o total de registros a serem mostrados, três para as duas situações.

Comentários

  1. Eduardo, meu amigo,

    Vim lhe retribuir a visita e conhecer o seu blog.
    Confesso que li, reli, virei de lado, oxıɐq ɐɹd ɐɔǝqɐɔ ǝp ıǝɹıʌ, mas não consegui entender...
    Então, quem sabe quando eu crescer, né?
    Sou biólogo e admiro quem consegue lidar com TI.
    Grande abraço e um ótimo final se semana!

    ResponderExcluir

Postar um comentário

Obrigado por Participar do programero, fique a vontade para agradecer, retificar, perguntar ou sugerir.

Mais visitadas

Desabilitar POST do ENTER ASP .NET

Caso não seja necessário uma atualização de página a cada vez que o usuário pressionar a tecla “ ENTER ” podemos codificar uma pequena função em javascript anulando esse comportamento, segue o código: < script language ="javascript"> function desabilitaPostDoEnter(e) {      var key;      if (window.event)           key = window.event.keyCode;  //IE      else           key = e.which;                      //firefox      if (key == 13)           return false ;      else           return true ; } </ script > Agora nos objetos que se deseja c...

Centralizar Texto em Edit

Como todos sabemos o Edit mantém todo texto digitado a esquerda, o que não fica bem quando o usamos para a entrada de números, pois bem, o exemplo abaixo apresenta uma alternativa para centralizar um determinado valor dentro de um Edit: procedure EditChange(Sender: TObject); var vl_label : TLabel; //variável do tipo Label begin vl_label := TLabel.Create(self); //criamos um label WITH vl_label DO BEGIN Font.Name := TEdit(sender).Font.Name; //pegamos a fonte usada no edit Caption := TEdit(sender).Text; //pegamos o conteúdo do edit SendMessage(TEdit(sender).Handle, EM_SETMARGINS, EC_LEFTMARGIN, (TEdit(sender).Width-vl_label.Width) div 2); //centraliza no label e retorna para o edit END ; vl_label.Free; end ;

Ler de um arquivo de configuração (.INI no Delphi)

Em muitos casos precisamos tornar nossas aplicações customizáveis, disponibilizando parâmetros que possam ser alterados, sejam eles informações a respeito de uma conexão com o banco de dados, uma senha, ou mesmo possibilitar a alteração do layout do sistema, tudo depende da necessidade e de como o programador pensa em termos de mobilidade para o usuário final. Exemplo de arquivo INI [PARAMETRO] SENHA=12345 Lendo um arquivo INI var // variável que irá conter o arquivo config : TIniFile; // variável que irá armazenar parâmetro a ser lido do arquivo param : string; begin // associa o arquivo de configuração a variável config := TIniFile.Create('C:\Aplicacao\config.ini'); //variável param recebe 12345 param := config.readstring('PARAMETRO','SENHA',''); end;