¿Cómo encontrar el third or nth
salario máximo del salario table(EmpID,EmpName,EmpSalary)
de manera optimizada?
sql
sql-server
sql-server-2008
Karan Gandhi
fuente
fuente
Respuestas:
Utilice
ROW_NUMBER
(si desea uno) oDENSE_RANK
(para todas las filas relacionadas):fuente
EmpSalary
columna. Además, ¿reducido en comparación con qué? La ventaja delROW_NUMBER
enfoque es que puede utilizar..OVER(PARTITION BY GroupColumn OrderBy OrderColumn)
. Por lo tanto, puede usarlo para obtener grupos pero aún acceder a cualquier columna de él.Numero de fila :
Consulta secundaria:
Palabra clave principal:
fuente
... WHERE (N-1) = (Subquery)...
funciona. La subconsulta es una consulta correlacionada ya que suWHERE
cláusula usaEmp1
de la consulta principal. La subconsulta se evalúa cada vez que la consulta principal escanea una fila. Por ejemplo, si vamos a encontrar el tercer salario más grande (N = 3) de (800, 1000, 700, 750), la subconsulta para la primera fila seríaSELECT COUNT(DISTINCT(Emp2.Salary)) FROM Employee Emp2 WHERE Emp2.Salary > 800
cuál es 0. Para el cuarto salario, el valor (750)... WHERE Emp2.Salary > 750
será 2, o N -1, por lo tanto, se devolverá esta fila.Prueba esto
Por 3 puedes reemplazar cualquier valor ...
fuente
Si desea optimizar la forma significa usar
TOP
palabra clave, por lo que la enésima consulta de salarios máximos y mínimos de la siguiente manera, pero las consultas parecen complicadas, ya que están en orden inverso al usar nombres de funciones agregadas:N salario máximo:
por ejemplo: 3 salario máximo:
N salario mínimo:
por ejemplo: 3 salario mínimo:
fuente
¡Demasiado simple si usa la subconsulta!
Aquí puede cambiar el enésimo valor después de la restricción LIMIT.
Aquí en esta subconsulta Seleccione EmpSalary de Pedido de empleado por EmpSalary DESC Límite 3; devolvería los 3 salarios superiores de los Empleados. Del resultado elegiremos el salario mínimo usando el comando MIN para obtener el tercer salario TOP del empleado.
fuente
Reemplaza N con tu número máximo
Explicación
La consulta anterior puede ser bastante confusa si no ha visto nada parecido antes: la consulta interna es lo que se llama una subconsulta correlacionada porque la consulta interna (la subconsulta) usa un valor de la consulta externa (en este caso, la tabla Emp1 ) en su cláusula WHERE.
Y fuente
fuente
... WHERE (N-1) = (Subquery)...
funciona. La subconsulta es una consulta correlacionada ya que suWHERE
cláusula usaEmp1
de la consulta principal. La subconsulta se evalúa cada vez que la consulta principal escanea una fila. Por ejemplo, si vamos a encontrar el tercer salario más grande (N = 3) de (800, 1000, 700, 750), la subconsulta para la primera fila seríaSELECT COUNT(DISTINCT(Emp2.Salary)) FROM Employee Emp2 WHERE Emp2.Salary > 800
cuál es 0. Para el cuarto salario, el valor (750)... WHERE Emp2.Salary > 750
será 2, o N -1, por lo tanto, se devolverá esta fila.Tercer o enésimo salario máximo de la tabla de salarios sin usar subconsulta
Para el tercer salario más alto, coloque 2 en lugar de N-1
fuente
fuente
Consulte la siguiente consulta para obtener el enésimo salario más alto. De esta manera, obtiene el enésimo salario más alto en MYSQL. Si desea obtener el enésimo salario más bajo, solo debe reemplazar DESC por ASC en la consulta.
fuente
fuente
Método 1:
Método 2:
fuente
En 2008 podemos usar ROW_NUMBER () OVER (ORDER BY EmpSalary DESC) para obtener un rango sin empates que podamos usar.
Por ejemplo, podemos obtener el octavo más alto de esta manera, o cambiar @N a otra cosa o usarlo como parámetro en una función si lo desea.
En SQL Server 2012, como ya sabrá, esto se realiza de forma más intuitiva utilizando LAG ().
fuente
fuente
Esta es una de las preguntas más populares en cualquier entrevista SQL. Voy a escribir diferentes consultas para encontrar el enésimo valor más alto de una columna.
He creado una tabla llamada "Emloyee" ejecutando el siguiente script.
Ahora voy a insertar 8 filas en esta tabla ejecutando debajo de la declaración de inserción.
Ahora encontraremos el tercer Basic_sal más alto de la tabla anterior usando diferentes consultas. He ejecutado la siguiente consulta en Management Studio y a continuación se muestra el resultado.
Podemos ver en la imagen de arriba que el tercer salario básico más alto sería 8500. Estoy escribiendo 3 formas diferentes de hacer lo mismo. Al ejecutar las tres consultas mencionadas a continuación, obtendremos el mismo resultado, es decir, 8500.
Primera forma: - Uso de la función de número de fila
fuente
Estoy mostrando el tercer salario más alto
fuente
fuente
- el décimo salario más alto
- (n-ésimo -1) salario más alto
fuente
Manera optimizada: en lugar de subconsultas, simplemente use limit.
Consulte la sintaxis de límite aquí http://www.mysqltutorial.org/mysql-limit.aspx
fuente
Para obtener el tercer valor más alto de la tabla
fuente
Por subconsulta:
fuente
Prueba esta consulta
Pon n = qué valor quieres
fuente
fuente
Solución probada de MySQL, suponga N = 4:
Otro ejemplo:
fuente
Prueba este código: -
fuente
Reemplaza n con el enésimo salario más alto como número.
fuente
Prueba este ...
fuente
Para el segundo salario más alto, cambie 3 a 2 en la consulta anterior y para el enésimo salario más alto a N, donde N = 1,2,3,4 ....
fuente
SELECCIONAR * DE (seleccionar Salario distinto de Clientes ordenar por salario DESC) límite 4,1;
El límite 4,1 significa dejar las primeras 4 filas y luego seleccionar la siguiente.
El límite y el número de filas dependen de la plataforma que esté utilizando.
Prueba esto, funcionará.
fuente
NOTA: Reemplace OFFSET 3 en Consulta con CUALQUIER N-ésimo número entero
Descripción
devuelve solo 1 fila
excluir los primeros 3 registros Aquí puede cualquier número entero
fuente
Las subconsultas siempre toman más tiempo:
use la siguiente consulta para obtener los datos más altos y más bajos:
Datos más altos:
select *from business order by id desc limit 3,1;
Datos más bajos:
select *from business order by id asc limit 3,1;
Puede usar N en lugar de 3 para obtener n-ésimo dato.
fuente