Код ошибки: 1248. У каждой производной таблицы должен быть свой псевдоним - PullRequest
0 голосов
/ 19 февраля 2020
SELECT dept_name,avg_salary
FROM (SELECT dept_name,AVG(salary) AS avg_salary
        FROM instructor
        group by dept_name)
WHERE avg_salary>42000;

Ответы [ 2 ]

3 голосов
/ 19 февраля 2020

Добавьте псевдоним в производную таблицу. Например:

SELECT dept_name,avg_salary 
FROM (SELECT dept_name,AVG(salary) AS avg_salary 
      FROM instructor group by dept_name) x
WHERE avg_salary>42000;

Вы видите x Я добавил?

1 голос
/ 19 февраля 2020

Ответ Импалера верен и фактически устраняет полученную ошибку.

Позвольте мне, однако, указать, что вам не нужен подзапрос для достижения вашей цели. Для фильтрации по агрегированному выражению вы можете использовать предложение having, являющееся частью стандарта SQL:

select dept_name, avg(salary) as avg_salary
from instructor
group by dept_name
having avg(salary) > 42000;

Кроме того, MySQL расширяет стандарт и позволяет вам использовать псевдонимы столбцов в предложении having, что, кроме того, упрощает запрос:

select dept_name, avg(salary) as avg_salary
from instructor
group by dept_name
having avg_salary > 42000;

Я ожидаю, что это решение должно быть более эффективным, чем использование подзапроса (если база данных не достаточно умна, чтобы обнаружить эту оптимизацию, в этом случае это будет эквивалентно с точки зрения производительности); и это, конечно, аккуратнее и легче для понимания.

...