оптимизировать SQL-код - PullRequest
1 голос
/ 07 февраля 2012

ребята, я должен выбрать всех сотрудников, у которых зарплата больше, чем средняя зарплата в его отделе, есть один код, который решает эту проблему, он здесь

select * from
(select  e.first_name || ' ' || e.last_name ENAME,
d.department_name,e.salary, trunc(e.salary-avg(salary) over (partition by
  e.department_id)) sal_dif
  from employees e,departments d
  where  e.department_id=d.department_id)
  where sal_dif>0

когда я запускаю его, он работает нормально, и стоимость этого кода на моем компьютере равна 6, я пытался сделать это по-другому, как этот

select   first_name || ' '|| last_name,salary
  from
  (select first_name || ' ' || last_name,salary ,avg(salary) over (partition by  department_id) avg_salary
  from employees )
  where salary>avg_salary;

Я удивлен тем, что, несмотря на наличие фамилии и имени в базе данных, ошибка

shows me ORA-00904: "LAST_NAME": invalid identifier
00904. 00000 -  "%s: invalid identifier"
*Cause:    
*Action:
Error at Line: 8 Column: 29

почему? Могу ли я переписать первый код другим способом? Большое спасибо

Ответы [ 3 ]

1 голос
/ 07 февраля 2012

Используйте псевдоним для идентификации столбца:

select   full_name,salary
  from
  (select first_name || ' ' || last_name as full_name,salary ,avg(salary) over (partition by  department_id) avg_salary
  from employees )
  where salary>avg_salary;
1 голос
/ 07 февраля 2012

Как альтернатива псевдониму объединенного столбца внутри подзапроса, не объединяйте столбцы в подзапросе - вместо этого замените конкатенацию на ,, например:

select   first_name || ' '|| last_name,salary
from
  (select first_name, last_name, salary,
          avg(salary) over (partition by  department_id) avg_salary
   from employees)
where salary>avg_salary;
1 голос
/ 07 февраля 2012
select name,salary
from
(select first_name || ' ' || last_name as name,salary ,avg(salary) over (partition by     department_id) avg_salary
  from employees )
  where salary>avg_salary;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...