2011-12-19 8 views
5

Tengo dos declaraciones de selección que encuentran el salario máximo para un rol específico. Ahora quiero tener el máximo de las dos devoluciones de esas declaraciones seleccionadas. Piense en el siguiente código:Oracle SQL - Máximo de dos sentencias de selección

SELECT MAX(SALARY) 
    FROM TABLE1 
WHERE ROLE = 'MANAGER' 

SELECT MAX(SALARY) 
    FROM TABLE1 
WHERE ROLE = 'DEVELOPER'; 

Al final quiero que el máximo de estos dos números.

¿Cómo podría hacer todo esto en una consulta?

¿Tiene dos selecciones para máximo, luego compara esos máximos y da el máximo de los dos máximos?

Respuesta

9

Dado que ambos selecciona leídos de la misma tabla, puede hacer esto:

SELECT MAX(SALARY) FROM TABLE1 WHERE ROLE = 'MANAGER' OR ROLE = 'DEVELOPER' 
4

se puede averiguar el salario máximo y el papel que tiene que el salario como este.

SELECT * FROM 
(
    SELECT MAX(SALARY) MAXSALARY, ROLE 
    FROM TABLE1 
    WHERE ROLE IN ('MANAGER','DEVELOPER') 
    GROUP BY ROLE 
    ORDER BY MAX(SALARY) 
) 
WHERE ROWNUM = 1 
10

Si desea un máximo de más títulos de trabajo, agregue ese título de trabajo en la matriz "IN". No es necesario escribir una declaración de selección para cada título de trabajo.

SELECT MAX(SALARY) FROM TABLE1 WHERE ROLE IN ('MANAGER','DEVELOPER') 
3

Esto se puede resolver con solo una instrucción de selección que varía según el rol.

SELECT MAX(SALARY) FROM TABLE1 WHERE ROLE = 'MANAGER' OR ROLE = 'DEVELOPER' 
Cuestiones relacionadas