簡體   English   中英

Oracle SQL查詢問題

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

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