2012-12-10 1 views
0

나는 상태에 따라 주문 된 모든 드라이버의 평균 급여보다 큰 급여를받는 드라이버를 구입해야합니다. 코드 I 하위 쿼리를 통해 "Order by"함수를 사용할 수 없습니다. 디스플레이는 드라이버 이름과 드라이버 상태 및 급여가됩니다. 여기 내 코드는 AVG와 같은 집계 함수를() 당신이 필요하거나 하위 쿼리는 "에 의해 순서"OR 절에 "그룹화"를 가지고 있음을 원하는 거의 절대 사용
급여가 높은 디스플레이 드라이버가 드라이버 상태에 따라 평균 급여보다 높습니다.

dr_status = the driver status 
dr_drvname = driver name 
dr_salary = driver salary 
driver = driver table 

select dr_drvname,dr_drvstatus,dr_salary 
from driver 
where dr_salary > (select avg(dr_salary) from driver group by dr_drvstatus) 
group by dr_drvstatus; 
+0

DDL 및 DML을 제공 할 수 있습니까? –

+0

계산 된 평균을 선택할 때 dr_drvstatus로 주문하려고하는 이유는 무엇입니까? 단일 값만 반환할까요? 거기에 주문할 것이 아무것도 없다. – jonhopkins

+0

"사용할 수 없다"는 것은 무엇을 의미합니까? 오류가 있습니까? 그렇다면 정확하게 무엇을 말합니까? –

답변

1

난 당신이 뭔가를 할 수 있습니다 확신 해요.

select dr_drvname,dr_drvstatus,dr_salary 
from driver d1 
where dr_salary > (
    select avg(dr_salary) from driver d2 
    where d2.dr_drvstatus = d1.dr_drvstatus 
) 
group by dr_drvstatus; 
+0

도움을 주셔서 감사합니다. –

0

입니다. 그것은 비교에서 사용되는 단일 값을 반환해야합니다 ... 당신은 어떤 순서로 단일 값을 원합니까? 그룹화 된 값 중 어느 값을 비교해야합니까? 옵션으로 미쳐 버리는군요. 내가 생각

(select avg(dr_salary) from driver)

0

이 뭔가를 원하는 : ;-)

은 하위 선택 만이 할을 잘라 ... 그 비트를 제거하려고 볼?

select dr_drvname,dr_drvstatus,dr_salary, avg_sal 
    from (select dr_drvname,dr_drvstatus,dr_salary, 
       avg(salary) over (partition by dr_drvstatus) avg_sal 
      from driver) 
where dr_salary > avg_sal; 
+0

옙의 결과와 dr_salary를 비교할 수 있을지 확신하지 못합니다. 감사. 필자가 특정 방식으로 작성하지 못했던 몇 가지 기능이 있습니다. 이것은 한 무리의 도움을줍니다. –

1

OLAP 기능을 사용하고 상관 하위 쿼리를 피하지, 아마 쓸 것 : 하위 쿼리가 한 번만 실행됩니다

SELECT d.dr_drvname, d.dr_drvstatus, d.dr_salary 
    FROM driver AS d 
    JOIN (SELECT d2.dr_drvstatus, AVG(d2.dr_salary) AS avg_salary 
      FROM driver AS d2 
     GROUP BY d2.dr_drvstatus 
     ) AS a ON d.dr_drvstatus = a.dr_drvstatus 
WHERE d.dr_salary < a.avg_salary; 

이 상태 및 평균 임금의 목록을 생성 그 상태. 상관 하위 쿼리 ( answer ~ jonhopkins)로 작성된 경우 최적화 프로그램이 하위 쿼리를 상관되지 않은 하위 쿼리로 변환 할 수 있음을 발견하지 못할 위험이 있습니다.

관련 문제