2014-04-12 38 views
0

我在SQLPLUS光標這裏面查詢SQLPLUS單行子查詢返回不止一行

SELECT last_name, department_id, salary 
FROM employees 
WHERE salary >(SELECT AVG(salary) 
       FROM employees 
       GROUP BY department_id) 
ORDER BY department_id; 

而且它給了錯誤:

ORA-01427: single-row subquery returns more than one row 

我知道,誤差在3線,但我不知道如何解決它,如果有人可以幫助我,我會很感激。

回答

0

這是因爲您的員工表中有多個部門。所以你的子查詢返回每個部門的平均工資。

您可以嘗試下面的查詢;


    SELECT last_name, department_id, salary 
    FROM employees e1 
    WHERE salary >(SELECT AVG(salary) 
       FROM employees e2 
       WHERE e2.department_id = e1.department_id 
       GROUP BY e2.department_id) 
    ORDER BY department_id; 

但是,此方法將導致子查詢計算每行的平均工資。

更好的辦法可以是;


    SELECT e1.last_name, e1.department_id, e1.salary 
    FROM employees e1 
    INNER JOIN (SELECT department_id, AVG(salary) avgsalary 
       FROM employees 
       GROUP BY department_id) as AvgSalaries on e1.department_id = AvgSalaries.department_Id 
    WHERE e1.salary > AvgSalaries.avgsalary 
    ORDER BY department_id; 

這種方式平均工資只計算一次所有部門。

只要注意到這是對於oracle,語法可能稍有不同,但一般的想法應該是相同的。

+0

感謝隊友,這真的有幫助。 –

+0

我很高興它有幫助。 – poaca