2011-12-19 18 views
5

Ho due istruzioni select che trovano lo stipendio massimo per un ruolo specifico. Ora voglio avere il massimo dei due ritorni di quelle istruzioni selezionate. Pensate il seguente codice:Oracle SQL - Massimo da due istruzioni select

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

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

Alla fine voglio il massimo di questi due numeri.

Come faccio tutto questo in una query?

Hai due selezioni per il massimo, quindi confronta quei valori massimi e dai il massimo dei due massimi?

risposta

9

Poiché entrambe le seleziona lette dalla stessa tabella, si può fare questo:

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

Si può capire lo stipendio massimo e il ruolo che lo stipendio avendo come questo.

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

Se si desidera il massimo da più titoli di lavoro, aggiungere il titolo di lavoro nell'array "IN". Non è necessario scrivere una dichiarazione di selezione per ogni titolo di lavoro.

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

Questo può essere risolto con una sola istruzione di selezione che varia sul ruolo.

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