2010-02-24 8 views
9

¿Hay un comando similar a:¿Cómo encontrar el n el valor más alto de una columna?

  • 2nd highest salary from tbl_salary o

  • 4th highest salary from tbl_salary?

que he visto:

select salary 
from tbl_salary t 
where &n = (
    select count(salary) 
    from(
     select distinct salary 
     from tbl_salary 
    )where t.salary<=salary 
); 

¿Cómo funciona esto funciona?

¿Hay otras formas simples de obtener resultados?

+2

ver también: http://stackoverflow.com/questions/80706 –

+0

Ver también: http://stackoverflow.com/questions/2255964/obtain-value-preceding-maximum-value –

Respuesta

12

Si se trata de una consulta básica, a continuación, sólo tiene que utilizar LÍMITE:

-- get the 4th highest salary 
SELECT salary FROM tbl_salary 
ORDER BY salary DESC 
LIMIT 3,1 
+0

y si no es una consulta básica, entonces? – diEcho

+0

bien si no se trata de un campo derivado ni nada (p. Ej .: quiero encontrar el registro del usuario de la persona que ha publicado la quinta mayoría de los artículos) este método funcionará bien. Después de eso, probablemente sea solo el caso de usar una subconsulta. – nickf

+3

@nickf, obtengo el quinto lugar más alto al ejecutar la consulta anterior. 'limit 3,1' obtendrá el 4 ° más alto, ¿verdad? Por favor avise – nu6A

2

usted puede hacerlo utilizando la cláusula de límite:

select * from tbl_salary order by salary desc limit 2,1; 
+2

¿no es esto solo oráculo? – nickf

+0

sí, tienes razón, gracias. Solo cambié mi respuesta. – road242

2

Estoy seguro de que hay una mejor manera de hacer esto, pero:

salario SELECT ORDEN tbl_salary por el salario DESC LIMIT n, 1

Donde n es la posición que desee - 1 (es decir, para obtener el salario segundo más alto sería LIMIT 1,1)

+0

mediante el uso de la palabra clave 'DISTINCT' dará una respuesta precisa ... ¿verdad? – diEcho

+0

@I Me gusta PHP: si su tabla contiene salarios duplicados, sí. ¿O podría usar el salario GROUP BY – jasonbar

6

// para el salario más alto de la tabla

select salary from table order by salary desc limit 0,1 

// para el segundo salario más alto

select salary from table order by salary desc limit 1,1 

El uso de esta consulta se obtiene el número de orden n del salario de la mesa ....

6
select * from employee order by salary desc limit 1,1 

Descripción: limit x,y

  • x: El desplazamiento de fila desde el que desea comenzar a mostrar registros. Por enésimo registro, será n-1.
  • y: el número de registros que desea visualizar. (Siempre 1 en este caso)
+0

Gracias por su esfuerzo, pero no tiene sentido responder a una pregunta de hace 2.5 años que también tiene una respuesta aceptada. – fancyPants

+1

@tombom explicación de sintaxis –

1

Sal SELECT desde el fin emp por límite de desc Sal 1,1

4

Esta es una manera muy simple para obtener el resultado del enésimo valor más alto

put n = 2 para obtener el segundo salario más alto
pur n = 4 para obtener el cuarto salario más alto
y así sucesivamente ...

Aquí es consulta
si n = 2

select salary from tbl_salary e1 
where 2 = (
select distinct(count(salary)) 
from tbl_salary e2 
where e1.salary< e2.salary 
) 

Mejor suerte

0

implementación más sencilla,

(select * from tbl_salary order by salary desc limit 5) order by salary limit 1; 


(select * from tbl_salary order by salary desc limit 2) order by salary limit 1; 
Cuestiones relacionadas