переписать sql без предложения - PullRequest
0 голосов
/ 02 ноября 2018

Я упал в SQL-дыру, пожалуйста, помогите мне Мне нужно переписать этот запрос без предложения with

with dept_total(dept_name, value) as
     (select dept_name, sum(salary)
     from instructor
     group by dept_name),
dept_total_avg(value) as 
     (select avg(value)
     from dept_total)
select dept_name
from dept_total, dept_total_avg
where dept_total.value >= dept_total_avg.value;

в основном в первой таблице складываются все оклады по отделам. вторая таблица получает средние суммы. Мне нужно найти способ выбрать отделы, в которых общее количество отделений превышает средние.

Он может быть записан любым способом, если он не использует предложение with. Я думал о - выберите сумму (зарплата) / количество (зарплата) как dept_total_avg, имя_депта от инструктора где dept_total_avg> все (выберите сумму (зарплата), от инструктора) группа по имени dept_name;

но это не работает, и теперь мой мозг тоже не работает. Пожалуйста помоги.

1 Ответ

0 голосов
/ 02 ноября 2018

Вам необходимо рассчитать среднее значение по отделу без доступа к промежуточному звену dept_total

SELECT
    dept_total.dept_name, dept_total.value, cj.dept_av
FROM (
    SELECT
        dept_name, SUM(salary) value
    FROM instructor
    GROUP BY
        dept_name
    ) AS dept_total
CROSS JOIN (
        SELECT
            SUM(salary) / (COUNT(DISTINCT dept_name) * 1.0) dept_av
        FROM instructor
    ) cj
WHERE dept_total.value >= cj.dept_av
;

В исходном запросе есть 2 "общих табличных выражения" (cte), каждому из которых присваивается имя, чтобы к ним можно было обратиться позже.

Первому из них дается имя dept_total

Любой следующий cte может повторно использовать этот cte с этим именем. Однако этот аспект повторного использования cte's невозможен с традиционными подзапросами «производной таблицы». Следовательно, если в окончательном запросе используется имя dept_total, вам необходимо заменить новый способ получения среднего значения по департаменту.


Если вы не знаете, MySQL 8 теперь доступен и поддерживает «общие табличные выражения» (with clause)

...