繁体   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