Problema: escriba una consulta SQL para encontrar el segundo valor más grande en una columna de una tabla.
Ejemplos:
En el primer ejemplo, encuentre el segundo valor más grande en la columna «Ingresos» y en el segundo, encuentre el segundo valor más grande en «Costo».
Input: Table name- Employee +------+--------+ | Name | Income | +------+--------+ | abc | 4000 | | xyz | 4752 | | qwe | 6579 | +------+--------+ Output: 4752 Input: Table name- price_list +-------------+--------+ | Item | Cost | +-------------+--------+ | Apple | 150 | | Banana | 175 | | Mango | 200 | | Pineapple | 180 | +-------------+--------+ Output: 180
Método 1:
Sintaxis:
SELECT MAX (column_name) FROM table_name WHERE column_name NOT IN (SELECT Max (column_name) FROM table_name);
Primero, seleccionamos el máximo de esa columna en la tabla, luego buscamos el valor máximo nuevamente en esa columna excluyendo el valor máximo que ya se encontró, por lo que da como resultado el segundo valor máximo.
- Ejemplo 1:
SELECT MAX (Income) FROM Employee WHERE Salary NOT IN (SELECT Max (Income) FROM Employee);
- Ejemplo-2:
SELECT MAX (Cost) FROM price_list WHERE Salary NOT IN (SELECT Max (Cost) FROM price_list);
Método-2:
Sintaxis:
SELECT column_name FROM table_name e WHERE 2 = (SELECT COUNT (DISTINCT column_name) FROM table_name p WHERE e.column_name<=p.column_name)
Esta es una subconsulta anidada que es una consulta SQL genérica para imprimir el enésimo valor más grande en la columna. Para cada registro procesado por la consulta externa, se ejecutará la consulta interna y devolverá cuántos registros tienen un valor inferior al valor actual. Si está buscando el segundo valor más alto, su consulta se detendrá tan pronto como la consulta interna devuelva 2.
- Ejemplo 1:
SELECT Income FROM Employee e WHERE 2=(SELECT COUNT(DISTINCT Income) FROM Employee p WHERE e.Income<=p.Income)
- Ejemplo-2:
SELECT Cost FROM price_list e WHERE 2=(SELECT COUNT(DISTINCT Cost) FROM price_list p WHERE e.Cost<=p.Cost)