[英]Oracle SQL query question
我正試圖完成這個Oracle SQL查詢而沒有運氣。
“列出平均成本最低的部門。(提示: SELECT MIN(AVG(cost)
)只要在SELECT語句中沒有組合其他列就有效。您可以將上面的子查詢與另一個查詢結合起來)”
我能夠以平均成本顯示Depts,但是當我嘗試在MIN
工作時它會中斷。 這就是我到目前為止所擁有的。
SELECT DeptNo, AVG(projcost) FROM projects, clinicians WHERE clinicians.Clinicianno = projects.Clinicianno GROUP BY DeptNo;
這將給我depts和他們的AVG,但是當我將AVG(projcost)
更改為MIN(AVG(projcost)
它會中斷。提示是使它成為子查詢但我無法弄清楚如何做到這一點。任何幫助將非常感激。
SELECT
MIN(q1.AvgProjCost)
FROM (SELECT
DeptNo,
AVG(projcost) as AvgProjCost
FROM projects, clinicians
WHERE clinicians.Clinicianno = projects.Clinicianno
GROUP BY DeptNo) q1
編輯假設我有以下部門項目費用
Department ProjectCost
1 15
1 15
1 15
2 16
2 16
3 17
3 17
4 18
這些項目成本將呈現以下平均值
Department Average
1 15
2 16
3 17
4 18
每個部門的最低平均值仍然是相同的結果集。
再次編輯
如果你真的必須擁有每個部門的最低平均值,那么這將有效
SELECT
q1.Dept,
MIN(q1.AvgProjCost)
FROM (SELECT
DeptNo,
AVG(projcost) as AvgProjCost
FROM projects, clinicians
WHERE clinicians.Clinicianno = projects.Clinicianno
GROUP BY DeptNo) q1
GROUP BY q1.Dept
但是,您很快就會意識到此結果集始終與之相同
SELECT
DeptNo,
AVG(projcost) as AvgProjCost
FROM projects, clinicians
WHERE clinicians.Clinicianno = projects.Clinicianno
GROUP BY DeptNo
再次編輯
獲得平均項目成本最低的部門
SELECT
q1.Dept,
q1.AvgProjCost
FROM (SELECT
DeptNo,
AVG(projcost) as AvgProjCost
FROM projects, clinicians
WHERE clinicians.Clinicianno = projects.Clinicianno
GROUP BY DeptNo) q1
WHERE rownum = 1
ORDER BY AvgProjCost DESC
嘗試這個:
WITH avgData AS
SELECT a.*,
RANK() OVER(ORDER BY avg_cost) RN
FROM
(
SELECT DeptNo,
AVG(projcost) avg_cost,
projects.ROWNUM rn
FROM projects,
clinicians
WHERE clinicians.Clinicianno = projects.Clinicianno
GROUP BY DeptNo
) a
SELECT *
FROM avgData
WHERE RN = 1
嘗試這個....
樣本數據
DEPTNO| AVG_COST 100 |8601.333333 30 |4150 90 |19333.33333 20 |9500 70 |10000 110 |10154 50 |3475.555556 80 |8955.882353 40 |6500 60 |5760 10 |4400
SELECT DEPTNO,AVG_COST FROM (SELECT P.DEPTNO, (AVG(C.COST)) AVG_COST FROM PROJECTS P, CLINICIANS C WHERE P.DEPTNO=C.DEPTNO GROUP BY P.DEPTNO ) WHERE AVG_COST= (SELECT MIN(AVG_COST) FROM (SELECT P.DEPTNO, (AVG(C.COST)) AVG_COST FROM PROJECTS P, CLINICIANS C WHERE P.DEPTNO=C.DEPTNO GROUP BY P.DEPTNO ) );
以上查詢將給出以下結果
DEPTNO| AVG_COST 50 |3475.555556
SELECT TOP 1 DeptNo,AVG(projcost)來自項目,臨床醫生臨床醫生.Clinicianno = projects.Clinicianno GROUP BY DeptNO ORDER BY AVG(projcost);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.