최소행과 최대행을 나오게 하고 싶습니다. 0 4 1,664

by 열심히 [2014.05.09 09:01:18]


select *
from
(
select  '001' code, 100  val from dual union all
select  '004' code, 400  val from dual union all
select  '005' code, 500  val from dual union all
select  '002' code, 200  val from dual
)
ORDER BY code

위 쿼리를 실행한 결과에 추가로 
컬럼2개를 붙여서
가장 최소 코드와 가장 큰 코드에 val 값을 같이 나오게 하고 싶습니다
위에서 code 001 이 가장작은 코드이고 값이 100,
code 005 가 가장크고 값이 500 입니다.

code , val, MIN, max
001 100   100  500
002 200   100  500
004 400   100  500
005 500   100  500

여러방법으로 돌리면 만들어 낼 수는 있습니다. 
이런 쿼리를 한방에 할수 있는 간단한 방법이나 분석함수가 있나해서 질문을 올립니다.
(* 예제는 의미만 전달할뿐이구요 code 는 어떤게 최소인지 최대인지  알수 없으므로
고정시킬 수는 없습니다.)

by 필상 [2014.05.09 09:17:25]

select A.CODE, A.VAL,
       FIRST_VALUE(A.VAL) OVER(ORDER BY CODE) AS C1,
       FIRST_VALUE(A.VAL) OVER(ORDER BY CODE DESC) AS C2
  from ( select  '001' code, 100  val from dual union all
         select  '004' code, 400  val from dual union all
         select  '005' code, 500  val from dual union all
         select  '002' code, 200  val from dual ) A
 ORDER BY code


by 열심히 [2014.05.09 10:06:48]

좋은 답변 감사드립니다.


by DarkBee [2014.05.09 10:13:25]

min () over()

max() over() 를 이용하셔도 됩니다.


by 마농 [2014.05.09 10:38:55]
-- code 순서와 val 순서가 항상 동일할 수 없으므로...
-- Min() Over() 로는 안되고 Min() Keep() Over() 로
SELECT code, val
     , MIN(val) KEEP(DENSE_RANK FIRST ORDER BY code) OVER() AS min
     , MIN(val) KEEP(DENSE_RANK LAST  ORDER BY code) OVER() AS max
  FROM t
;

 

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입