Consulta para encontrar el segundo valor más grande en una columna en la tabla

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) 

Publicación traducida automáticamente

Artículo escrito por anand27 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *