필드 a와 같은 record에 있는 필드 b의 값을 가져오는 방법.
ex) 등록일이 제일 빠른 2013-09-05 의 같은 record에 있는 id값 가져오기 max(id) 와는 다른....
등록일이 제일 늦은 2013-09-01 의 같은 record에 있는 id값 가져오기 min(id) 와는 다른 ....
first나 last 함수는 행을 서열화 시켜서 첫 번째나 마지막 행을 추출한다..
MIN(B) (DENSE_RANK FIRST ORDER BY A [ASC|DESC])
MAX(B) (DENSE_RANK LAST ORDER BY A [ASC|DESC])
【형식】
집합함수 KEEP (
DENSE_RANK FIRST ORDER BY
expr [DESC|ASC][NULL{FIRST|LAST}],...)
【예제】
SQL> select
2 min(salary) keep (dense_rank first order by salary) "Worst",
3 max(salary) keep (dense_rank last order by salary) "Best"
4 from employees
5 order by id;
Worst Best
---------- ----------
220 250
SQL> select * from employees;
ID DEPT_NO NAME SALARY BONUS
---------- ---------- ---------- ---------- ----------
1101 10 Cho 250 125
1102 20 Joe 240 100
1103 10 kim 250 100
1104 20 jijoe 220 100
1. MIN(a) 의 경우
MIN(b) KEEP(DENSE_RANK FIRST ORDER BY a)
2. MAX(a)의 경우
MAX(b) KEEP(DENSE_RANK FIRST ORDER BY a DESC)
와 같이 사용하면 a의 값에 따른 필드 b의 값을 가져 올 수 있습니다.
ex) table명 table1
field1 field2
1 c
2 b
3 a
SQL> select MIN(field1), MIN(field2) KEEP(DENSE_RANK FIRST ORDER BY field1) AS field2 from table1
결과>1, c
SQL> select MAX(field1), MAX(field2) KEEP(DENSE_RANK LAST ORDER BY field1) AS field2 from table1
결과> 3 , a
MAX(field2) KEEP(DENSE_RANK LAST ORDER BY field1) over (partition by field3,field4) AS field2 - partitioning도 할수 있다.
출처 : http://302.pe.kr/88
'SQL' 카테고리의 다른 글
oracle extract (0) | 2013.10.08 |
---|---|
oracle XML 저장(extractValue,updateXML,existsNode) (0) | 2013.10.08 |
REGEXP_REPLACE 정규식 표현을 이용한 행변환 (0) | 2013.09.05 |
oracle xmltype (0) | 2013.07.04 |
oracle XMLELEMENT,XMLAGG,XMLFOREST,XMLATTRIBUTES 함수 (0) | 2013.07.04 |