[英]Sql subquery with a group by and a join on two tables
所以我有兩個表EMPLOYEE-包含EMPLOYEE_NAME,DEPARTMENT_ID和SALARY DEPARTMENTS的列-包含DEPARTMENT_NAME和DEPARTMENT_ID的列
我需要顯示每個部門的部門名稱和平均工資,並按平均工資對其進行排序。
我是DB的新手,遇到了麻煩。 我嘗試在from字段中進行子查詢(此子查詢返回的正是我需要的值減去部門名稱,然后我需要將部門表加入到結果中),子查詢中的所有數據都在一個表employees中。 而部門名稱在部門表中。
這是我嘗試過的。
SELECT D.DEPARTMENT_NAME, T.PERDEPT
FROM
(
SELECT DEPARTMENT_ID, AVG(SALARY) AS PERDEPT
FROM EMPLOYEE
GROUP BY DEPARTMENT_ID
ORDER BY PERDEPT
) AS TEST T
JOIN DEPARTMENTS
ON D.DEPARTMENT_ID=T.DEPARTMENT_ID;
這返回一個
SQL命令未正確終止
與AS TEST T
非常感謝任何幫助
該查詢應該執行您要求的操作:
select d.department_name, avg(e.salary) as avg_salary
from salary_department d
left join employee e on e.department_id = d.department_id
group by d.department_name
order by avg(e.salary)
只需更正表別名即可,因為您似乎對子查詢有兩個別名( TEST和T ),而對D沒有賦值。 為每個表/查詢引用調整一個別名的SQL:
...
(
SELECT ...
) AS T
JOIN DEPARTMENTS D
如此說來,您甚至不需要子查詢,因為只要DEPARTMENTS表中的DEPARTMENT_ID是唯一的,而不用對JOIN
聚合查詢就不會對聚合進行重復計算。
SELECT D.DEPARTMENT_NAME,
AVG(E.SALARY) AS PERDEPT
FROM EMPLOYEE E
JOIN DEPARTMENTS D
ON E.DEPARTMENT_ID = D.DEPARTMENT_ID
GROUP BY E.DEPARTMENT_ID,
D.DEPARTMENT_NAME
ORDER BY AVG(SALARY)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.