2015-09-23 29 views
-3

這個SQL查詢有什麼問題?我的簡單SQL查詢有什麼問題?

SELECT 
    department_id, MAX(AVG(SALARY)) 
FROM 
    EMPLOYEES 
GROUP BY 
    department_id; 

這說明不是單一羣組功能於一體的查詢

+0

你能更具體嗎?無法理解您的要求。 – shubhamagiwal92

+1

你不能有2個聚合函數,使用子查詢 – Mihai

+0

任何人都可以提出一個解決方案,使此查詢工作。 – salam

回答

2

2個聚合函數無法做到的,你應該使用子查詢來實現你的結果。

我已經沒有可能性,以測試它現在這樣無法保證在此查詢,但你可以得到一個想法。

select max (avg_salary) 
from (select department_id, avg(SALARY) AS avg_salary 
     from EMPLOYEES 
     group by department_id); 

內部查詢選擇deparment_id和平均工資。 使用AS語句使用別名avg_salary選擇Avarage工資。

外部查詢選擇最大的avg_salary-

這也許不是你的問題的完整解決方案,正如我所說,沒有測試,因此無法保證,但你應該有一個想法,現在如何下手。 ;-)

+1

一注:我認爲你應該別名子查詢。 –

+0

好注意,thx! :) – p9teufel

+0

謝謝p9teufel。我通過稍微修改您的查詢來獲得輸出結果 – salam

0

你不能在一個查詢中有一個以上的聚合函數。試試這個

select dept, max(average) over (partition by dept) 
from (SELECT department_id dept, 
      (AVG(SALary) OVER (PARTITION BY department_id)) average 
       FROM employees); 
0

方案1,雙GROUP BY

SELECT department_id, AVG(SALARY) 
FROM EMPLOYEES 
GROUP BY department_id 
HAVING AVG(SALARY) = (select max(avg_sal) 
         from (select avg(salary) as avg_sal 
          from EMPLOYEES 
          group by department_id)) 

將返回兩個department_id的,如果有一個領帶!

方案2,使用CTE(公共表表達式):

with 
(
    SELECT department_id, AVG(SALARY) as avg_sal 
    FROM EMPLOYEES 
    GROUP BY department_id 
) as cte 
select department_id, avg_sal 
from cte 
where avg_sal = (select max(avg_sal) from cte) 

這也將同時返回department_id的,如果有一個領帶!