RANK () OVER 이거에서 숫자몇이하만 선택하려면~ 1 3 7,895

by 손님 RANK OVER [2009.11.11 18:36:00]


RANK () OVER 머..이런 함수를 써서 랭크는 매겼는데

그 중 예를들어 3이하만 선택하려면 어떻게 해야하는지...

where 절에 rk < 3 이렇게 하면 안되던데요...

 

select code, name, name1, RANK() OVER(PARTITION BY code ORDER BY name) rk
from t_umf_poi
where
( name like ’%혜%’ and name1 like ’%해%’  ) ;

 

by 러드 [2009.11.12 07:48:03]
select *
from (select code
, name
, name1
, RANK() OVER(PARTITION BY code ORDER BY name) rk
from t_umf_poi
where ( name like '%혜%' and name1 like '%해%' )
)
where rk < 3

이렇게 하시던지 아니면

select code
, name
, name1
, RANK() OVER(PARTITION BY code ORDER BY name) rk
from t_umf_poi
where ( name like '%혜%' and name1 like '%해%' )
and RANK() OVER(PARTITION BY code ORDER BY name) < 3
이렇게 해야 겠네요!!!

by 꼬랑지 [2009.11.12 08:42:26]
sql문의 실행순서를 아셔야 합니다.

SELECT --3
FROM --1
WHERE --2
ORDER BY --4

가장 일반적인 쿼리문 골격이라고 할 수 있는 위 문장에서 실행순서는 번호순입니다. 즉 WHERE절이 SELECT절 보다 먼저 실행됩니다. 그러므로 WHERE절은 FROM절에 나열한 집합에 있는 칼럼은 인식할 수 있지만 WHERE절 후에 실행되는 SELECT절에서 사용자가 만든 의사칼럼인 RK는 인식하지 못합니다. 결국 러드님이 쓰신대로 ()로 감싸 인라인뷰로 만든 후 다시 한번 SELECT해야 합니다.

참고로 분석함수등에 사용되는 OVER()절은 WHERE 구문에서 사용할 수 없습니다.

by 러드 [2009.11.13 07:51:36]
감사합니다!!

그냥 적다보니까 분석함수도 가능하다고 생각을 햇네요1! ^^ ㅋㅋ
댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입