這個SQL查詢有什麼問題?我的簡單SQL查詢有什麼問題?
SELECT
department_id, MAX(AVG(SALARY))
FROM
EMPLOYEES
GROUP BY
department_id;
這說明不是單一羣組功能於一體的查詢
這個SQL查詢有什麼問題?我的簡單SQL查詢有什麼問題?
SELECT
department_id, MAX(AVG(SALARY))
FROM
EMPLOYEES
GROUP BY
department_id;
這說明不是單一羣組功能於一體的查詢
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-
這也許不是你的問題的完整解決方案,正如我所說,沒有測試,因此無法保證,但你應該有一個想法,現在如何下手。 ;-)
你不能在一個查詢中有一個以上的聚合函數。試試這個
select dept, max(average) over (partition by dept)
from (SELECT department_id dept,
(AVG(SALary) OVER (PARTITION BY department_id)) average
FROM employees);
方案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
的,如果有一個領帶!
你能更具體嗎?無法理解您的要求。 – shubhamagiwal92
你不能有2個聚合函數,使用子查詢 – Mihai
任何人都可以提出一個解決方案,使此查詢工作。 – salam