¿Cómo puedo encontrar el N-ésimo salario más alto en una tabla que contiene los salarios en SQL Server?Consulta SQL para encontrar el N-ésimo salario más alto de una tabla de salarios
Respuesta
Puede usar una expresión de tabla común (CTE) para obtener la respuesta.
Digamos que usted tiene los siguientes salarios en los sueldos de mesa:
EmployeeID Salary
--------------------
10101 50,000
90140 35,000
90151 72,000
18010 39,000
92389 80,000
vamos a utilizar:
DECLARE @N int
SET @N = 3 -- Change the value here to pick a different salary rank
SELECT Salary
FROM (
SELECT row_number() OVER (ORDER BY Salary DESC) as SalaryRank, Salary
FROM Salaries
) as SalaryCTE
WHERE SalaryRank = @N
Esto creará un número de fila para cada fila después de que ha sido ordenado por el Salario en orden descendente, luego recupera la tercera fila (que contiene el tercer registro más alto).
Para aquellos de ustedes que no quieren un CTE (o están atrapados en SQL 2000):
[Nota : Esto realiza notablemente peor que el ejemplo anterior; ejecutarlos de lado a lado con una planes exceution muestra un coste de consulta de 36% para el CTE y 64% para la subconsulta]:
SELECT TOP 1 Salary
FROM
(
SELECT TOP N Salary
FROM Salaries
ORDER BY Salary DESC
) SalarySubquery
ORDER BY Salary ASC
donde N se define por ti.
SalarySubquery
es el alias que he dado a la subconsulta, o la consulta que está entre paréntesis.
Lo que hace la subconsulta es seleccionar los mejores sueldos de N (digamos en este caso), y los ordena por el mayor salario.
Si queremos ver el tercer salario más alto, la subconsulta volvería:
Salary
-----------
80,000
72,000
50,000
La consulta externa a continuación, selecciona el primer sueldo de la subconsulta, excepto que estamos arreglármelo ascendente este tiempo, que ordena de menor a mayor, por lo que 50,000 sería el primer registro ordenado ascendente.
Como puede ver, 50,000 es de hecho el tercer salario más alto en el ejemplo.
esta parte está claro que me podría u explicármelo SalarySubquery ORDER BY ASC Salario – NoviceToDotNet
@NoviceToDotNet - He editado mi respuesta en función de sus comentarios. Espero que aclaren las cosas. – LittleBobbyTables
@LittleBobbyTables: He editado tu respuesta - parte CTE. Si es correcto, acepte amablemente los cambios; de lo contrario, corrígeme. –
Puede usar row_number
para elegir una fila específica. Por ejemplo, el salario más alto 42a:
select *
from (
select row_number() over (order by Salary desc) as rn
, *
from YourTable
) as Subquery
where rn = 42
Las funciones de división como row_number
sólo puede aparecer en select
o order by
cláusulas. La solución alternativa es colocar el row_number
en una subconsulta.
select MIN(salary) from (
select top 5 salary from employees order by salary desc) x
Creo que es el más simple. ¡¡buen trabajo!! – himanshupareek66
manera simple sin utilizar ninguna característica especial específica para Oracle, MySQL, etc. Supongamos que en sueldos tabla de empleados se pueden repetir. Utilice la consulta para buscar el rango de cada ID.
select *
from (
select tout.sal, id, (select count(*) +1 from (select distinct(sal) distsal from
EMPLOYEE) where distsal >tout.sal) as rank from EMPLOYEE tout
) result
order by rank
Primero nos enteramos de distintos sueldos. Luego descubrimos el recuento de salarios distintos superiores a cada fila. Esto no es más que el rango de esa identificación. Para el salario más alto, este conteo será cero. Así que '+1' se hace para iniciar el rango de 1.
Ahora podemos obtener identificadores en el N ° rango agregando la cláusula where a la consulta anterior.
select *
from (
select tout.sal, id, (select count(*) +1 from (select distinct(sal) distsal from
EMPLOYEE) where distsal >tout.sal) as rank from EMPLOYEE tout
) result
where rank = N;
probarlo ...
use table_name
select MAX(salary)
from emp_salary
WHERE marks NOT IN (select MAX(marks)
from student_marks)
muy simple consulta para encontrar enésima salario más alto
SELECT DISTINCT(Sal) FROM emp ORDER BY Salary DESC LIMIT n,1
Esto está etiquetado como ** [sql-server] **; SQL Server no tiene la palabra clave LIMIT – LittleBobbyTables
El método más fácil es conseguir 2nd higest salary
de table
en SQL
:
sql> select max(sal) from emp where sal not in (select max(sal) from emp);
No se olvide de utilizar la palabra clave distinct
: -
SELECT TOP 1 Salary
FROM
(
SELECT Distinct TOP N Salary
FROM Salaries
ORDER BY Salary DESC
) SalarySubquery
ORDER BY Salary ASC
EmpID Name Salary
1 A 100
2 B 800
3 C 300
4 D 400
5 E 500
6 F 200
7 G 600
SELECT * FROM Employee E1
WHERE (N-1) = (
SELECT COUNT(DISTINCT(E2.Salary))
FROM Employee E2
WHERE E2.Salary > E1.Salary
)
Suponga que desea encontrar quinto salario más alto, lo que significa que hay un total de 4 empleados que tienen sueldos superiores a quinto más alto de los empleados. Por lo tanto, para cada fila de la consulta externa, verifique el número total de salarios que son mayores que el salario actual. La consulta externa funcionará primero para 100 y verifique el número de salarios mayor que 100. Será 6, no coincida con (5-1) = 6
donde la cláusula de externalquery. Luego, para 800, y verifique el número de salarios mayor que 800, 4=0
falso, entonces trabaje para 300 y finalmente hay 4 registros en la tabla que son mayores que 300. Por lo tanto, 4=4
cumplirá con la cláusula where y devolverá 3 C 300
.
Solución 1: Esta SQL para encontrar el salario enésima más alto debería funcionar en SQL Server, MySQL, DB2, Oracle, Teradata, y casi cualquier otro RDBMS: (nota: bajo rendimiento debido a la subconsulta)
SELECT * /*This is the outer query part */
FROM Employee Emp1
WHERE (N-1) = (/* Subquery starts here */
SELECT COUNT(DISTINCT(Emp2.Salary))
FROM Employee Emp2
WHERE Emp2.Salary > Emp1.Salary)
Lo más importante de entender en la consulta anterior es que la subconsulta se evalúa cada vez que una fila es procesada por la consulta externa. En otras palabras, la consulta interna no se puede procesar independientemente de la consulta externa ya que la consulta interna también usa el valor Emp1.
Para encontrar el N-ésimo salario más alto, solo encontramos el salario que tiene exactamente N-1 salarios mayores que él.
Solución 2: Encuentra el salario más alto enésima usando la palabra clave TOP en SQL Server
SELECT TOP 1 Salary
FROM (
SELECT DISTINCT TOP N Salary
FROM Employee
ORDER BY Salary DESC
) AS Emp
ORDER BY Salary
Solución 3: Encuentra el salario más alto de orden n en SQL Server sin utilizar TOP
SELECT Salary FROM Employee
ORDER BY Salary DESC OFFSET N-1 ROW(S)
FETCH FIRST ROW ONLY
Tenga en cuenta que no he probado personalmente el SQL anterior, y creo que solo funcionará en SQL Server 2012 y posteriores.
SELECT * FROM
(select distinct postalcode from Customers order by postalcode DESC)
limit 4,1;
4 aquí significa dejar primero 4 y mostrar la siguiente 1.
Prueba esto funciona para mí.
Postalcode aquí es el nombre de la columna y Customers es el nombre de la tabla. –
- 1. ¿Cómo obtener el enésimo salario más alto de una tabla sin usar TOP y subconsulta?
- 2. SQL - ¿Cómo encontrar el número más alto en una columna?
- 3. Encontrar el segundo salario máximo usando linq
- 4. ¿Cómo puedo encontrar el segundo salario más grande de la tabla de empleados?
- 5. ¿Cómo encontrar sueldo quinto más alto en una sola consulta en SQL Server
- 6. Recuperando el segundo valor más alto de una tabla
- 7. Consulta SQL interrumpida por el servidor para una tabla con más de 1 millón de registros?
- 8. consulta para encontrar el primer y el segundo valor más grande de un grupo
- 9. Pregunta SQL para encontrar la clave principal de una tabla?
- 10. consulta sql para encontrar los registros duplicados
- 11. Encontrar el valor más alto en una enumeración
- 12. Java: Encontrar el valor más alto en una matriz
- 13. Encontrar el orden más alto 1 en una primitiva Java
- 14. ¿Cómo encontrar el número más alto en una matriz?
- 15. orden SQL por el valor más alto de dos columnas
- 16. ¿Cuál es la consulta SQL más simple para encontrar el segundo valor más grande?
- 17. Esquema/consulta SQL eficiente para una tabla de líderes
- 18. Consulta SQL para encontrar los números de secuencia faltantes
- 19. Acceso consulta SQL: encontrar la fila con la fecha más reciente para cada entrada en una tabla distinta
- 20. ¿Cómo puedo realizar una consulta SQL 'NO EN' más rápido?
- 21. Encontrar los tipos de datos de una tabla temporal SQL
- 22. consulta SQL para la tabla del árbol
- 23. Crear una consulta SQL para recuperar los registros más recientes
- 24. consulta SQL a través de una tabla intermedia
- 25. Usando consulta SQL para determinar si existe una tabla
- 26. posible crear una consulta sql con comodines de tabla?
- 27. ¿Cómo puedo extender esta consulta SQL para encontrar los k vecinos más cercanos?
- 28. Hacer una consulta SQL más eficiente
- 29. Consulta SQL para obtener el valor que aparece más de una vez
- 30. Consulta SQL para tabla de unión y valores múltiples
Un blog detallada: http://sforsuresh.in/mysql-query-nth-highest-salary-from-employee-table/ –