Oracle SQL вопрос - PullRequest
       3

Oracle SQL вопрос

0 голосов
/ 12 апреля 2011

Я безуспешно пытаюсь завершить этот запрос Oracle SQL.

"Перечислите отдел с наименьшей средней стоимостью. (Подсказка: SELECT MIN(AVG(cost)) действителен, если нет других столбцов.объединено в операторе SELECT. Вы можете объединить вышеупомянутое как подзапрос с другим запросом) "

Я могу заставить его отображать Depts с их средней стоимостью, но когда я пытаюсь работать в MIN это ломает.Это то, что я имею до сих пор.

SELECT DeptNo, AVG(projcost) FROM projects, clinicians WHERE clinicians.Clinicianno = projects.Clinicianno GROUP BY DeptNo;

Это даст мне депозиты и их AVG, но когда я изменяю AVG(projcost) на MIN(AVG(projcost), он ломается.Подсказка - сделать это подзапросом, но я пока не могу понять, как это сделать.Любая помощь будет высоко ценится.

Ответы [ 4 ]

3 голосов
/ 12 апреля 2011
SELECT 
  MIN(q1.AvgProjCost)
FROM (SELECT 
        DeptNo, 
        AVG(projcost) as AvgProjCost 
      FROM projects, clinicians 
      WHERE clinicians.Clinicianno = projects.Clinicianno 
      GROUP BY DeptNo) q1

EDITED Предположим, у меня есть следующие расходы на проект отдела

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
1 голос
/ 12 апреля 2011

Попробуйте это:

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
0 голосов
/ 04 апреля 2017

Попробуйте это ....

Пример данных

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

0 голосов
/ 12 апреля 2011

ВЫБРАТЬ ТОП 1 DeptNo, AVG (projcost) ИЗ проектов, клиницисты ГДЕ клиницисты.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...