순위함수로 첫번째의 값과, 마지막의 값을 가져오고 싶은데
어떤 방법이 있나요?
WITH MEMBER AS ( SELECT 'DB' 부서, '김디비' 이름 , 160 키 , 1 순서 from DUAL UNION ALL SELECT 'DB' 부서, '박디비' 이름 , 180 키 , 2 순서 from DUAL UNION ALL SELECT 'DB' 부서, '서디비' 이름 , 170 키 ,3 순서 from DUAL UNION ALL SELECT 'DB' 부서, '박디비' 이름 , 165 키 ,4 순서 from DUAL UNION ALL SELECT 'UI' 부서, '김디비' 이름 , 150 키 ,1 순서 from DUAL UNION ALL SELECT 'UI' 부서, '박디비' 이름 , 190 키 ,2 순서 from DUAL UNION ALL SELECT 'UI' 부서, '서디비' 이름 , 180 키 ,3 순서 from DUAL ) SELECT 부서, 이름, 연봉, ROW_NUMBER() OVER(PARTITION BY 부서 ORDER BY 연봉) RN FROM MEMBER
위를 데이터를 예시로 들었을 때
부서 순서1 순서마지막
DB 160 165
UI 150 180
이렇게 표시하고싶습니다.. 순서의 총 인원수는 다릅니다.
WITH MEMBER AS ( SELECT 'DB' 부서, '김디비' 이름 , 5000 연봉 from DUAL UNION ALL SELECT 'DB' 부서, '박디비' 이름 , 3500 연봉 from DUAL UNION ALL SELECT 'DB' 부서, '서디비' 이름 , 3000 연봉 from DUAL UNION ALL SELECT 'DB' 부서, '박디비' 이름 , 3500 연봉 from DUAL UNION ALL SELECT 'UI' 부서, '김디비' 이름 , 4500 연봉 from DUAL UNION ALL SELECT 'UI' 부서, '박디비' 이름 , 3500 연봉 from DUAL UNION ALL SELECT 'UI' 부서, '서디비' 이름 , 3000 연봉 from DUAL ) SELECT 부서, MIN(연봉),MAX(연봉) FROM MEMBER GROUP BY 부서 ORDER BY 부서
예시가 잘못되었어요.. 죄송합니다
그 중 높은 숫자를 찾는것이 아닌 순차적으로 첫번째 사람와 마지막 사람의 값을 가져오는 예시 입니다.
키 를 이용해서 예시 수정하였습니다..
부서별 연봉 최대 , 최소값을 원하시는건가요?
전체 연봉 최대 , 최소값을 원하시는건가요?
A 컬럼에 순서가 정해져있다면
첫번째 순서의 B컬럼의 값,
마지막 순서의 B컬럼의 값 을 가져오고싶습니다.
| 기준 | A | B |
| 한국 | 1 | 의사 |
| 한국 | 2 | 선생님 |
| 한국 | 3 | 교사 |
| 한국 | 4 | 축구선수 |
출력
| 기준 | 첫번째 | 마지막 |
| 한국 | 의사 | 축구선수 |
-- 전체 연봉 최고 , 최저값 SELECT * FROM (SELECT 부서, 이름, 연봉, , ROW_NUMBER() OVER(ORDER BY 연봉) RN1 , ROW_NUMBER() OVER(ORDER BY 연봉 DESC ) RN2 FROM MEMBER ) WHERE 1 IN ( RN1 , RN2 )
WITH member AS
(
SELECT 'DB' 부서, '김디비' 이름, 160 키, 1 순서 FROM dual
UNION ALL SELECT 'DB', '박디비', 180, 2 FROM dual
UNION ALL SELECT 'DB', '서디비', 170, 3 FROM dual
UNION ALL SELECT 'DB', '박디비', 165, 4 FROM dual
UNION ALL SELECT 'UI', '김디비', 150, 1 FROM dual
UNION ALL SELECT 'UI', '박디비', 190, 2 FROM dual
UNION ALL SELECT 'UI', '서디비', 180, 3 FROM dual
)
SELECT 부서
, MIN(이름) KEEP(DENSE_RANK FIRST ORDER BY 순서) 이름_first
, MIN(이름) KEEP(DENSE_RANK LAST ORDER BY 순서) 이름_last
FROM member
GROUP BY 부서
;
SELECT 기준
, MIN(CASE WHEN RN1 = 1 THEN B END) NM1
, MIN(CASE WHEN RN2 = 1 THEN B END) NM2
FROM (SELECT 기준, A, B
, ROW_NUMBER() OVER(PARTITION BY 기준 ORDER BY A) RN1
, ROW_NUMBER() OVER(PARTITION BY 기준 ORDER BY A DESC ) RN2
FROM MEMBER
)
GROUP BY 기준