Как оптимизировать SQL-запрос с несколькими вариантами выбора - PullRequest
0 голосов
/ 11 декабря 2018

У меня есть запрос, который использует несколько SELECTS, и мне нужно оптимизировать это, но я понятия не имею, как это сделать.

Запрос:

SELECT e.last_name, e.salary, t1.PROMEDIO 
FROM employees e, 
     (
       SELECT e.department_id, AVG(e.salary) PROMEDIO 
       FROM employees e 
       GROUP  BY e.department_id
     ) t1 
WHERE e.department_id = t1.department_id 
     AND e.salary < t1.PROMEDIO;

Ответы [ 2 ]

0 голосов
/ 11 декабря 2018

Лучше написать этот запрос, используя оконные функции:

select e.* 
from (select last_name, department_id, salary, 
             avg(salary) over (partition by department_id) as avgsalary
      from employees e
     ) e
where salary < avgsalary;

Для производительности вам нужен индекс на employees(department_id, salary).

0 голосов
/ 11 декабря 2018

Если я правильно понимаю ваш вопрос, вы пытаетесь вернуть всех сотрудников, чья зарплата меньше, чем средняя зарплата по отделу.Если это так, вы можете использовать оконную функцию avg() over():

select * 
from (
    select last_name, department_id, salary, 
         avg(salary) over (partition by department_id) avgsalary
    from employees
) t
where salary < avgsalary
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...