Oracle SQL — максимум из двух операторов выбора

У меня есть два оператора select, которые находят максимальную зарплату для конкретной роли. Теперь я хочу получить максимум двух возвратов этих операторов select. Подумайте о следующем коде:

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

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

В конце я хочу максимум из этих двух чисел.

Как бы я сделал все это в одном запросе?

Иметь два выбора для максимума, затем сравнить эти максимумы и дать максимум из двух максимумов?


person oneiros    schedule 19.12.2011    source источник


Ответы (4)


Поскольку оба варианта выбирают чтение из одной и той же таблицы, вы можете сделать это:

SELECT MAX(SALARY) FROM TABLE1 WHERE ROLE = 'MANAGER' OR ROLE = 'DEVELOPER'
person Sergey Kalinichenko    schedule 19.12.2011

Если вы хотите получить максимум от большего количества должностей, добавьте эту должность в массив «IN». Не нужно писать по одному оператору выбора для каждой должности.

SELECT MAX(SALARY) FROM TABLE1 WHERE ROLE IN ('MANAGER','DEVELOPER')
person Somnath Muluk    schedule 19.12.2011

Вы можете вычислить максимальную зарплату и роль, имеющую эту зарплату, вот так.

SELECT * FROM
(
   SELECT MAX(SALARY) MAXSALARY, ROLE
     FROM TABLE1
    WHERE ROLE IN ('MANAGER','DEVELOPER')
    GROUP BY ROLE
    ORDER BY MAX(SALARY)
)
WHERE ROWNUM = 1
person O. Jones    schedule 19.12.2011

Это можно решить с помощью всего одного оператора select, который зависит от роли.

SELECT MAX(SALARY) FROM TABLE1 WHERE ROLE = 'MANAGER' OR ROLE = 'DEVELOPER'
person Community    schedule 22.02.2012