es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Seleccionar el máximo de entradas en un rango en SQL Server.

Tengo una columna de salarios en la cual debo seleccionar entre un rango de 10000 y 20000, y también las filas superiores del salario máximo.

Columna que tengo:

25000
17000
17000
15000
14000
9000

Filas que quiero seleccionar:

17000
17000
17000

Puedo usar las filas superiores (top n rows), pero eso solo se aplica a esta columna. Lo que quiero hacer es, si esta columna tiene 2 filas que tienen el salario máximo, seleccionaría 2, pero si otra columna tiene 5 filas que tienen el salario máximo, como se muestra a continuación, entonces debería seleccionar 5.

Columna que tengo:

24000
17000
17000
17000
17000
17000
15000
14000
9000

Filas que quiero seleccionar:

17000
17000
17000
17000
17000

Mi instrucción SQL:

select max(salary)
from table
where salary between 10000 and 20000
order by salary desc;

Esta instrucción solo devuelve 1 fila.

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Para seleccionar tanto el rango de 10000 a 20000 como las filas con el salario máximo, podemos combinar las condiciones utilizando el operador UNION ALL. Aquí está la instrucción SQL para obtener el resultado deseado:

    SELECT salario
    FROM tabla
    WHERE salario BETWEEN 10000 AND 20000
    UNION ALL
    SELECT TOP (
            SELECT COUNT(*)
            FROM tabla
            WHERE salario = (
                SELECT MAX(salario)
                FROM tabla
                WHERE salario BETWEEN 10000 AND 20000
            )
        ) salario
    FROM tabla
    WHERE salario = (
            SELECT MAX(salario)
            FROM tabla
            WHERE salario BETWEEN 10000 AND 20000
        );
    

    Explicación:

    • La primera instrucción SELECT selecciona todas las filas que se encuentran en el rango de 10000 a 20000.
    • La segunda instrucción SELECT selecciona las primeras N filas, donde N es la cantidad de salarios que son iguales al salario máximo en el rango de 10000 a 20000. Para lograr esto, utilizamos una subconsulta para contar el número de dichos salarios y luego lo utilizamos en la expresión TOP. La condición WHERE filtra solo aquellas filas donde el salario es igual al salario máximo en el rango de 10000 a 20000.

    Nota: El operador UNION ALL se utiliza para combinar los resultados de las dos instrucciones SELECT. Si utilizamos UNION en lugar de UNION ALL, se eliminarán los duplicados y solo obtendremos una fila para cada valor. Dado que queremos incluir duplicados, utilizamos UNION ALL.

Comments are closed.