2016-06-04 3 views
0

Там в «Сотрудники» таблица:Выполнение определенного типа вложенный SELECT,

| Name | Income | Job_Title | 
+--------+----------+-------------+ 
| Adam | 1000 |  ABC  | 
| Walt | 1200 |  ABC  | 
| Kate | 2000 |  XYZ  | 
| Abel | 2500 |  XYZ  | 
| Judy | 1300 |  ABC  | 
| Jess | 2400 |  XYZ  | 
| ... | ... |  ...  | 

Я хочу выбрать для каждого человека: человека Name, Job_Title, а минимальный и максимальный Income человека который имеет тот же Job_Title, для достижения этой цели:

| Name | Min  | Max | Job_Title | 
+--------+----------+----------+------------+ 
| Adam | 1000 | 1300 | ABC  | 
| Walt | 1000 | 1300 | ABC  | 
| Kate | 2000 | 2500 | XYZ  | 
| Abel | 2000 | 2500 | XYZ  | 
| Judy | 1000 | 1300 | ABC  | 
| Jess | 2000 | 2500 | XYZ  | 
| ... | ... | ... | ...  | 

(. Я могу найти/выяснить решения для других типов вложенных сортирует, но здесь ... Я озадачен)

ответ

2

Один из способов сделать получить результат, который вы ищете, чтобы использовать коррелированные подзапросы, как это:

select 
    name, 
    (select min(income) from employees where Job_Title = e.Job_Title) as min, 
    (select max(income) from employees where Job_Title = e.Job_Title) as max, 
    Job_Title 
from employees e 

Или вы могли бы использовать выражение общей таблицы, чтобы получить мин/макс значение для каждого заголовка задания и присоединитесь к этому, например:

with min_max as (
    select min(income) as min, max(income) as max, Job_Title 
    from Employees 
    group by Job_Title 
) 

select name, min, max, e.Job_Title 
from Employees e 
join min_max mm on e.Job_Title = mm.Job_Title 
Смежные вопросы