2010-01-29 10 views

Respuesta

11

Pruebe algo como:

SELECT TOP 1 compensation FROM (
    SELECT TOP 2 compensation FROM employees 
    ORDER BY compensation DESC 
) AS em ORDER BY compensation ASC 

Esencialmente:

  • Encuentra los mejores 2 salarios en orden descendente.
  • De esos 2, encuentre el salario más alto en orden ascendente.
  • El valor seleccionado es el segundo salario más alto.

Si los salarios no son distintos, puede usar SELECT DISTINCT TOP ... en su lugar.

+1

Cuando la remuneración TOP 1 es ganada por más de 1 empleado, esta consulta arrojará un resultado incorrecto. –

+1

Si los salarios no son distintos, puede usar 'SELECT DISTINCT TOP ...' en su lugar. –

4

Prueba esto:

SELECT 
    salary, 
    employeeid 
FROM 
    employees 
ORDER BY 
    salary DESC 
LIMIT 2 

A continuación, sólo se produce la segunda fila.

+0

¿Qué pasa si los dos primeros salarios son los mismos? – moghya

9

Quizás debería usar DENSE_RANK.

SELECT * 
FROM (
     SELECT 
     [Salary], 
     (DENSE_RANK() 
     OVER 
     (
      ORDER BY [Salary] DESC)) AS rnk 
     FROM [Table1] 
     GROUP BY [Num] 
    ) AS A 
WHERE A.rnk = 2 
+3

Reemplace RANK() con DENSE_RANK() y funciona. –

+0

sí Frank, tienes razón – CoderHawk

+0

He cambiado la consulta en consecuencia – CoderHawk

47

Prueba esto:

SELECT max(salary) 
FROM emptable 
WHERE salary < (SELECT max(salary) 
       FROM emptable); 
3
select distinct(t1.sal) 
from emp t1 
where &n=(select count(distinct(t2.sal)) from emp t2 where t1.sal<=t2.sal); 

Salida: Entre el valor para n: si quieres segunda más alta, introduzca 2; si quieres 5, introduzca n = 3

2
select * from compensation where Salary = (
     select top 1 Salary from (
     select top 2 Salary from compensation 
     group by Salary order by Salary desc) top2 
     order by Salary) 

el cual le dará todos filas con el salario segundo más alto, lo que algunas personas pueden compartir

2
select max(Salary) from Employee 
where Salary 
not in (Select Max(Salary) from Employee) 
2
select max(Salary) from Employee 
where Salary 
    not in (Select top4 salary from Employee); 

porque la respuesta es la siguiente

max (5,6,7,8)

tan quinto registro más alto será displa yed, cuatro primeros no serán considerados

2

Prueba esto:

select max(Emp_Sal) 
from Employee a 
where 1 = (select count(*) 
     from Employee b 
     where b.Emp_Sal > a.Emp_Sal) 
+0

Esto no funciona si hay salarios duplicados. Digamos que hay tres mismos salarios máximos 30000 y que está encontrando el segundo más alto. –

3

Para encontrar segundo salario máximo de los empleados,

SELECT MAX(salary) FROM employee 
WHERE salary NOT IN (
    SELECT MAX (salary) FROM employee 
) 

encontrar primero y segundo salario máximo de los empleados,

SELECT salary FROM (
    SELECT DISTINCT(salary) FROM employee ORDER BY salary DESC 
) WHERE rownum<=2 

Estas consultas funcionan bien porque he usado

+0

de hecho, si usted tiene una tabla: 1. 100 2. 100 3. 50 su consulta devolverá ** ** nula, que es respuesta incorrecta en este caso – kvatashydze

2
SELECT 
    TOP 1 salary 
FROM 
    (
     SELECT 
      TOP 2 salary 
     FROM 
      employees 
    ) sal 
ORDER BY 
    salary DESC; 
2
select max(sal) from emp 
where sal not in (select max(sal) from emp) 

O

select max(salary) from emp table 
where sal<(select max(salary)from emp) 
9

La mayoría de las otras respuestas parecen ser db específica.

consulta general de SQL debe ser el siguiente:

select sal from emp a where N = (select count(distinct sal) from emp b where a.sal <= b.sal) 
where N = any value. 

y esta consulta debe ser capaz de trabajar en cualquier base de datos.

+0

excelente respuesta 1 – anubhava

5
select max(Emp_Sal) 
from Employee a 
where 1 = (select count(*) 
     from Employee b 
     where b.Emp_Sal > a.Emp_Sal) 

Sí running man.

4

// para seleccionar el nombre del empleado cuyo salario es el segundo más alto

SELECT name 
FROM employee WHERE salary = 
     (SELECT MIN(salary) FROM 
      (SELECT TOP (2) salary 
       FROM employee 
       ORDER BY salary DESC)) 
33

respuesta simple:

SELECT sal 
FROM emp 
ORDER BY sal DESC 
LIMIT 1, 1; 

obtendrá sólo el segundo salario máximo.

Y si necesita cualquier valor 3º, 4º o Nº, puede aumentar el primer valor seguido de LIMIT (n-1), es decir.para el 4 de sueldo: LIMIT 3, 1;

+1

Esto quiere trabajo si tiene 2 registros con el mismo salario. Quiere darte el segundo máximo. –

+1

@mukeshpatel debe aplicarse distinto, gracias por señalarlo. – SandeepGodara

1
select * from emp 
where sal=(select min(sal) from 
(select sal from(select distinct sal from emp order by sal desc) 
where rownum<=n)); 

n puede ser el valor que desea ver ......

se puede ver todos los campos de esa persona que tiene salario más alto enésima * texto fuerte *

Cuestiones relacionadas