簡體   English   中英

SQL子查詢,帶有group by和兩個表的聯接

[英]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)

只需更正表別名即可,因為您似乎對子查詢有兩個別名( TESTT ),而對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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM