Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 Вставить столбец из подзапроса  [new]
serebr
Member

Откуда:
Сообщений: 59
Задача: написать запрос для нахождения всех сотрудников, которые зарабатывают больше среднего оклада по их отделу.
Вывести фамилию, оклад, номер отдела и средний оклад по отделу.

В целом я задачу решила, но не могу сообразить как добавить столбец "Средний оклад по отделу"?

select distinct a.last_name, a.salary, a.department_id
from employees a, employees b
where a.salary > (select ceil(avg(b.salary))from employees b 
                  where  b.department_id = a.department_id)
order by a.department_id;


Не бейте меня сильно, у меня сейчас интернет остался 2G, искать сама уже замучалась...
18 окт 13, 19:41    [15000411]     Ответить | Цитировать Сообщить модератору
 Re: Вставить столбец из подзапроса  [new]
Lecter
Member

Откуда: Киев
Сообщений: 2032
serebr,

1. with вас спасет.
2. Зачем distinct?
18 окт 13, 19:49    [15000440]     Ответить | Цитировать Сообщить модератору
 Re: Вставить столбец из подзапроса  [new]
serebr
Member

Откуда:
Сообщений: 59
Digstinct забыла убрать, остался от предыдущей программки

А поконкретнее не подскажете?
18 окт 13, 19:56    [15000463]     Ответить | Цитировать Сообщить модератору
 Re: Вставить столбец из подзапроса  [new]
Ramin Hashimzade
Member

Откуда: Азербайджан, Баку
Сообщений: 9979
Блог
serebr
Digstinct забыла убрать, остался от предыдущей программки

А поконкретнее не подскажете?

Не надо три раза сотрясать таблицу,
Попробуйте:

Select q.* from(
select a.last_name, 
         a.salary, 
         a.department_id, 
         avg(a.salary) over(partition by a.department_id) avgs
from employees a
) q
where q.salary > q.avgs


----
Ramin Hashimzade
18 окт 13, 20:17    [15000514]     Ответить | Цитировать Сообщить модератору
 Re: Вставить столбец из подзапроса  [new]
-2-
Member

Откуда:
Сообщений: 15330
serebr
больше среднего оклада по их отделу
баян во всех учебниках и здесь проходили.
Вот только ни разу не уточняется, что такое "средний оклад по отделу" - то ли percentile_disc, то ли percentile_cont/median, и все решают постановку "среднее окладов отдела".
18 окт 13, 20:21    [15000523]     Ответить | Цитировать Сообщить модератору
 Re: Вставить столбец из подзапроса  [new]
Слюсар Никита
Guest
Или так :-)

with d as (
select
ceil(avg(b.salary)) as avr_zp,
department_id
from employees b
group by department_id
)
select
a.last_name,
a.salary,
a.department_id,
d.avr_zp
from employees a, d
where d.department_id = a.department_id;
18 окт 13, 20:22    [15000525]     Ответить | Цитировать Сообщить модератору
 Re: Вставить столбец из подзапроса  [new]
SY
Member

Откуда: Middlebury, CT USA
Сообщений: 10051
14726498

SY.
18 окт 13, 20:31    [15000545]     Ответить | Цитировать Сообщить модератору
 Re: Вставить столбец из подзапроса  [new]
serebr
Member

Откуда:
Сообщений: 59
Огромное спасибо, сделала через with, как подсказал Никита, все работает :-) :-)
18 окт 13, 20:50    [15000590]     Ответить | Цитировать Сообщить модератору
 Re: Вставить столбец из подзапроса  [new]
Ramin Hashimzade
Member

Откуда: Азербайджан, Баку
Сообщений: 9979
Блог
serebr
Огромное спасибо, сделала через with, как подсказал Никита, все работает :-) :-)

И чем не понравился мой вариант? Может вы любитель нагрузки ))))

----
Ramin Hashimzade
18 окт 13, 21:08    [15000631]     Ответить | Цитировать Сообщить модератору
 Re: Вставить столбец из подзапроса  [new]
serebr
Member

Откуда:
Сообщений: 59
Я разбирала оба, но ваш выдал ошибку... (видать я что-то накосячила), его буду смотреть завтра, самой интересно разобраться :-) К сожалению, с инетом полный швах, пожтому сегодня выложить результаты не могу (
18 окт 13, 21:15    [15000640]     Ответить | Цитировать Сообщить модератору
 Re: Вставить столбец из подзапроса  [new]
Ramin Hashimzade
Member

Откуда: Азербайджан, Баку
Сообщений: 9979
Блог
serebr
Я разбирала оба, но ваш выдал ошибку... (видать я что-то накосячила), его буду смотреть завтра, самой интересно разобраться :-) К сожалению, с инетом полный швах, пожтому сегодня выложить результаты не могу (

Какую ошибку ? Покажите как выполняли и ошибку.

----
Ramin Hashimzade
18 окт 13, 21:19    [15000651]     Ответить | Цитировать Сообщить модератору
 Re: Вставить столбец из подзапроса  [new]
Ramin Hashimzade
Member

Откуда: Азербайджан, Баку
Сообщений: 9979
Блог
serebr
Я разбирала оба, но ваш выдал ошибку... (видать я что-то накосячила), его буду смотреть завтра, самой интересно разобраться :-) К сожалению, с инетом полный швах, пожтому сегодня выложить результаты не могу (

Дай угадаю, выполняешь запрос в таком виде

Select q.* from(
select a.last_name, 
         a.salary, 
         a.department_id, 
         Ceil(avg(a.salary)) over(partition by a.department_id) avgs
from employees a
) q
where q.salary > q.avgs


поэтому и выдал ошибку....
Угадал?

----
Ramin Hashimzade
18 окт 13, 21:25    [15000664]     Ответить | Цитировать Сообщить модератору
 Re: Вставить столбец из подзапроса  [new]
serebr
Member

Откуда:
Сообщений: 59
Я уже ушла от компа, шаманю, чтобы инет вернулся в нормальное русло :-). Завтра все пересмотрю и выложу.
18 окт 13, 21:30    [15000675]     Ответить | Цитировать Сообщить модератору
 Re: Вставить столбец из подзапроса  [new]
serebr
Member

Откуда:
Сообщений: 59
Ramin Hashimzade,

Но думаю, что вы угадали, поскольку вы такой код и дали :-)
18 окт 13, 21:36    [15000697]     Ответить | Цитировать Сообщить модератору
 Re: Вставить столбец из подзапроса  [new]
Ramin Hashimzade
Member

Откуда: Азербайджан, Баку
Сообщений: 9979
Блог
serebr
Ramin Hashimzade,

Но думаю, что вы угадали, поскольку вы такой код и дали :-)

Я такой код не давал, если нужно функция ceil тогда нужно писать :

Select q.* from(
select a.last_name, 
         a.salary, 
         a.department_id, 
         Ceil(avg(a.salary) over (partition by a.department_id)) avgs
from employees a
) q
where q.salary > q.avgs


----
Ramin Hashimzade
18 окт 13, 21:43    [15000709]     Ответить | Цитировать Сообщить модератору
 Re: Вставить столбец из подзапроса  [new]
SY
Member

Откуда: Middlebury, CT USA
Сообщений: 10051
serebr
Но думаю, что вы угадали, поскольку вы такой код и дали :-)


Да нет, не такой. Это ты неправильно "обула" аналитический AVG в CEIL. Медитируй над:

Ceil(avg(a.salary)) over(partition by a.department_id) avgs

и

Ceil(avg(a.salary) over(partition by a.department_id)) avgs

SY.
18 окт 13, 21:44    [15000719]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить