select titINsme as 제품명, tbase.pcount as 생산량
rank() over(order by tbase.pcount desc nulls last ) as 생산량_순위
from titem tit
left outer join
(
select tpr.inumber, sum(tpr.PCount) PCount
from tProduction tpr
where TO_CHAR(tpr.PDate,'YYYYMM')='202001'
GROUP BY tpr.INumber
) tBASE
ON tit.INUmber = tBase.Inumber
이렇게 서브쿼리 형식이면 left outer join 대신 + 를 사용할 수 없나요 ?
+기호를 사용할 수있는 방법이 있을까요 ?
오라클이라면 (+) 기호 사용 가능합니다.
그런데. (+)를 꼭 사용해야만 하나요? LEFT JOIN 을 하면 안되는 이유가 있는지?
그리고. 오라클 맞나요? 구문 오류가 좀 보이는데요?
오라클이라면? FROM 절에서 AS 사용 못합니다.
rank 앞에 컴마(,)도 누락되었네요.
YYYMM 에도 Y 가 하나 누락되었네요.
쿼리 수정하셨네요.
- FROM 절 AS 빼셨고
- YYYMM 을 YYYYMM 으로 수정하셨네요.
- RANK 앞에 컴마(,) 만 추가해 주시면 오라클에서도 정상 동작 할 것입니다.
- titINsme 는 tit.IName 의 오타가 아닐까? 생각됩니다.
-- ANSI --
SELECT titINsme AS 제품명
, tbase.pcount AS 생산량
, RANK() OVER(ORDER BY tbase.pcount DESC NULLS LAST) AS 생산량_순위
FROM titem tit
LEFT OUTER JOIN
(SELECT tpr.inumber
, SUM(tpr.PCount) PCount
FROM tProduction tpr
WHERE TO_CHAR(tpr.PDate, 'yyyymm') = '202001'
GROUP BY tpr.INumber
) tBASE
ON tit.INUmber = tBase.Inumber
;
-- Oracle --
SELECT titINsme AS 제품명
, tbase.pcount AS 생산량
, RANK() OVER(ORDER BY tbase.pcount DESC NULLS LAST) AS 생산량_순위
FROM titem tit
, (SELECT tpr.inumber
, SUM(tpr.PCount) PCount
FROM tProduction tpr
WHERE TO_CHAR(tpr.PDate, 'yyyymm') = '202001'
GROUP BY tpr.INumber
) tBASE
WHERE tit.INUmber = tBase.Inumber(+)
;