таблицы агрегирования с AVG - PullRequest
1 голос
/ 30 марта 2020

Я новичок в SQL.

Я проверил "другое решение SQL СОЕДИНЕНИЕ двух таблиц с AVG ", опубликованных в StackOverflow. И я не понимаю смысла этой строки в этой статье: AVG(score.score * 1.0) Кроме того, альтернативное решение, приведенное ниже, вообще не работает:

SELECT songs.id, songs.song, songs.artist, 
    (SELECT AVG(Score) FROM score WHERE score.id = songs.id) AS AvgScore)
FROM songs 

Здесь мои таблицы:

[employees]
Dep ID | SALARY
1      |  500
2      |  200
1      |  300
2      | 1000
2      |  400
3      |  200
3      |  300
[departments]
Dept ID Dep| Dept Name
1          | Volcano
2          | ShootingStar
3          | Tsunami

В конце концов, я хочу создать список выглядит так:

Dept Name   | Average Salary
Volcano     | $$$
ShootingStar| $$
Tsunami     | $$$$

Я пробовал разные способы и охоты подсказки в стеке потока для подзапросов / функций внутреннего соединения, но все еще не могут его получить.

Основано на решении, указанном в предыдущей ссылке SQL СОЕДИНИТЬ две таблицы с AVG , этот код работает :

-- mapping DEPT ID with NAME + average salary by DEPT --
select EMPLOYEES.DEP_ID, DEPARTMENTS.DEP_NAME, AVG(EMPLOYEES.SALARY) as AVG_S
from EMPLOYEES 
    LEFT JOIN DEPARTMENTS
    ON EMPLOYEES.DEP_ID = DEPARTMENTS.DEPT_ID_DEP
group by DEP_ID, DEP_NAME;

Однако я хочу понять причину, ПОЧЕМУ мой оригинальный не работает?

select E.DEP_ID, D.DEP_NAME,  (select AVG(SALARY) from EMPLOYEES group by DEP_ID) as AVG_S
from EMPLOYEES E, DEPARTMENTS D
where E.DEP_ID = D.DEPT_ID_DEP
group by DEP_ID, DEP_NAME;

Пожалуйста, помогите!

Большое спасибо.

1 Ответ

0 голосов
/ 30 марта 2020

Запрос, который вы хотели написать:

select 
    e.dep_id, 
    d.dep_name,  
    (select avg(salary) from employees e where e.dep_id = d.dept_id_dep) as avg_s
from departments d;

Лог c запроса - select только из departments, затем используйте коррелированный подзапрос для вычисления средней заработной платы сотрудников. отдела. Это позволяет избежать агрегирования во внешнем запросе.

Ваш запрос не выполняется по следующим причинам:

  • таблица employees содержится в предложении from внешнего запроса

  • внешний запрос выполняет group by

  • подзапрос не связан с отделом

...