Como encontrar third or nth
salário máximo de salário de table(EmpID,EmpName,EmpSalary)
forma otimizada?
sql
sql-server
sql-server-2008
Karan Gandhi
fonte
fonte
Respostas:
Use
ROW_NUMBER
(se desejar) ouDENSE_RANK
(para todas as linhas relacionadas):fonte
EmpSalary
coluna. Além disso, reduzido em comparação com o quê? A vantagem daROW_NUMBER
abordagem é que você pode usar..OVER(PARTITION BY GroupColumn OrderBy OrderColumn)
. Portanto, você pode usá-lo para obter grupos, mas ainda assim acessar qualquer coluna dele.Número da linha:
Sub Consulta:
Palavra-chave principal:
fonte
... WHERE (N-1) = (Subquery)...
funciona. A subconsulta é uma consulta correlacionada, pois suaWHERE
cláusula usaEmp1
da consulta principal. A subconsulta é avaliada cada vez que a consulta principal varre uma linha. Exemplo, se formos encontrar o 3º maior salário (N = 3) de (800, 1000, 700, 750), a subconsulta para a 1ª linha seriaSELECT COUNT(DISTINCT(Emp2.Salary)) FROM Employee Emp2 WHERE Emp2.Salary > 800
0. Para o 4º salário, o valor (750)... WHERE Emp2.Salary > 750
será 2, ou N -1, portanto, esta linha será retornada.Tente isto
Por 3 você pode substituir qualquer valor ...
fonte
Se você quiser otimizar a maneira, use
TOP
palavra-chave. Portanto, a enésima consulta de salários máximos e mínimos da seguinte maneira, mas as consultas parecem complicadas por estarem na ordem inversa, usando nomes de funções agregadas:Salário máximo N:
para Ex: 3 salários máximos:
Salário mínimo N:
por Ex: 3 salários mínimos:
fonte
Muito simples se você usar a sub-consulta!
Você pode aqui apenas alterar o enésimo valor após a restrição LIMIT.
Aqui nesta Subconsulta Selecione EmpSalary em Employee Order by EmpSalary DESC Limit 3; retornaria os 3 principais salários dos Funcionários. Do resultado, escolheremos o salário mínimo usando o comando MIN para obter o 3º salário superior do funcionário.
fonte
Substitua N pelo seu número máximo
Explicação
A consulta acima pode ser bastante confusa se você não viu nada parecido antes - a consulta interna é chamada de subconsulta correlacionada porque a consulta interna (a subconsulta) usa um valor da consulta externa (neste caso, a tabela Emp1 ) em sua cláusula WHERE.
E fonte
fonte
... WHERE (N-1) = (Subquery)...
funciona. A subconsulta é uma consulta correlacionada, pois suaWHERE
cláusula usaEmp1
da consulta principal. A subconsulta é avaliada cada vez que a consulta principal varre uma linha. Exemplo, se formos encontrar o 3º maior salário (N = 3) de (800, 1000, 700, 750), a subconsulta para a 1ª linha seriaSELECT COUNT(DISTINCT(Emp2.Salary)) FROM Employee Emp2 WHERE Emp2.Salary > 800
0. Para o 4º salário, o valor (750)... WHERE Emp2.Salary > 750
será 2, ou N -1, portanto, esta linha será retornada.Terceiro ou enésimo salário máximo da tabela de salários sem usar subconsulta
Para o 3º maior salário, coloque 2 no lugar de N-1
fonte
fonte
Consulte a consulta a seguir para obter o enésimo salário mais alto. Desta forma, você obtém o enésimo maior salário em MYSQL. Se você deseja obter o n-ésimo salário mais baixo, apenas substitua DESC por ASC na consulta.
fonte
fonte
Método 1:
Método 2:
fonte
Em 2008 podemos usar ROW_NUMBER () OVER (ORDER BY EmpSalary DESC) para obter uma classificação sem empates que possamos usar.
Por exemplo, podemos obter o 8º maior desta forma, ou alterar @N para outra coisa ou usá-lo como um parâmetro em uma função, se desejar.
No SQL Server 2012, como você deve saber, isso é executado de forma mais intuitiva usando LAG ().
fonte
fonte
Esta é uma das perguntas populares em qualquer entrevista SQL. Vou escrever consultas diferentes para descobrir o enésimo maior valor de uma coluna.
Eu criei uma tabela chamada “Emloyee” executando o script abaixo.
Agora vou inserir 8 linhas nesta tabela executando a instrução insert abaixo.
Agora descobriremos o terceiro Basic_sal mais alto da tabela acima usando diferentes consultas. Eu executei a consulta abaixo no Management Studio e abaixo está o resultado.
Podemos ver na imagem acima que o 3º maior Salário Básico seria 8500. Estou escrevendo 3 maneiras diferentes de fazer o mesmo. Ao executar todas as três consultas mencionadas abaixo, obteremos o mesmo resultado, ou seja, 8500.
Primeira maneira: - Usando a função de número de linha
fonte
Estou apresentando o 3º maior salário
fonte
fonte
--nº maior salário
- (n-1) maior salário
fonte
Forma otimizada: Em vez de subconsulta, use apenas limite.
Consulte a sintaxe de limite aqui http://www.mysqltutorial.org/mysql-limit.aspx
fonte
Para obter o terceiro maior valor da tabela
fonte
Por subconsulta:
fonte
Tente esta consulta
Coloque n = qual valor você deseja
fonte
fonte
Solução testada MySQL, suponha que N = 4:
Outro exemplo:
fonte
Experimente este código: -
fonte
Substitua n pelo enésimo maior salário como número.
fonte
Tente este...
fonte
Para o 2º maior salário, altere 3 para 2 na consulta acima e para o Nº maior salário para N onde N = 1,2,3,4 ....
fonte
SELECT * FROM (selecionar Salário distinto de Clientes ordem por salário DESC) limite 4,1;
O limite 4,1 significa deixar as primeiras 4 linhas e, em seguida, selecionar a próxima.
O limite e o número de linhas dependem da plataforma que você está usando.
Experimente, vai funcionar.
fonte
NOTA: Substitua o OFFSET 3 na consulta por QUALQUER enésimo número inteiro
Descrição
retornar apenas 1 linha
excluir os primeiros 3 registros Aqui você pode qualquer número inteiro
fonte
As subconsultas sempre levam mais tempo:
use a consulta abaixo para obter os dados mais altos e mais baixos:
Dados mais altos:
select *from business order by id desc limit 3,1;
Dados mais baixos:
select *from business order by id asc limit 3,1;
Pode usar N no lugar de 3 para obter os enésimos dados.
fonte