개발자의 끄적끄적

[Oracle] MAX/MIN 함수, RANK 함수 본문

개발/sql

[Oracle] MAX/MIN 함수, RANK 함수

효벨 2020. 8. 15. 03:00
728x90
반응형

[Oracle] MAX/MIN 함수, RANK 함수

 

 

MAX / MIN 함수

 

 

MAX 함수는 주어진 데이터 중에서 가장 큰 값을 되돌려주고

MIN 함수는 주어진 데이터 중에서 가장 작은 값을 되돌려준다.

그렇기 때문에 가장 큰 값과 가장 작은 값을 찾아서 정렬로 알아볼 때 유용하고 많이 사용된다.

 

예를 들어 월급이 높은 순으로, 나이가 많은 순으로, 몸무게가 적은 순으로, 등등 나타낼때

최대/최소값을 추출할 때 사용한다.

 

MAX(컬럼값) MIN(컬럼값) from (테이블명)

하지만 MAX/MIN 함수는 순서대로 정렬하기 때문에 시간이 오래걸리므로 주의해야 한다.

 

 

문제 1)

STUDENT 테이블에서 가장 높은 몸무게와 가장 낮은 몸무게를 나타내시오.

(가장 높은 몸무게를 MAX로 가장 낮은 몸무게를 MIN로 표시하라)

구하는 방법은 간단하다.

컬럼명을 입력할 때 앞에 MAX나 MIN을 붙여서 사용하면 된다

MAX(WEIGHT) 는 가장 높은 몸무게고 MIN(WEIGHT)는 가장 낲은 몸무게를 나타낸다

 

 

 

RANK 함수

 

RANK 함수는 주어진 컬럼 값의 그룹에서 값의 순위를 계산한 후 순위를 출력해준다.

예를 들어 성적순이나 월급순 키,몸무게 순 등을 나타낼 때 높은순 낮은순으로 출력값을 나타낼 수 있다.

 

RANK(조건값) WITHIN GROUP (ORDER BY 조건값 컬럼명 [ASC | DESC] )

 

예를 들어 컬럼명이 NAME 이면 조건값도 NAME 중 하나여야 하고

컬럼명이 SAL 이면 조건값도 SAL 중에 하나여야 한다

즉 컬럼명과 조건값이 같아야 순위를 출력할 수 있다.

 

 

문제 2)

STUDENT 테이블에서 'Russo' 라는 ID 의 순위를 나타내시오.

당연한 소리겠지만 RANK 뒤에 출력하고자 하는 데이터 값과 ORDER BY 뒤에 나오는 데이터는

같은 컬럼이어야 출력이 가능하다.

위에 에러가 뜬 이유는 RANK 뒤에는 찾고자 하는 ID 값을 입력했지만 ORDER BY 뒤에는 ID 가 아닌 JIMIN을 입력했기 때문.

즉 JIMIN 컬럼에서 ID 값을 찾으려니 없기 때문에 에러가 발생한 것이다. 주의하도록 하자

 

 

SELECT RANK( 조건값 ID ) WITHIN GROUP (ORDER BY 조건값 ID )

 

 

ID 컬럼에서 Russo 는 순위가 17번째 이므로

RANK의 결과값이 제대로 출력된 것을 확인할 수 있다.

 

 

전체순위보기 : RANK() 뒤가 WITHIN GROUP 에서 OVER 로 바뀐다. (OVER은 전체에 대해 사용할 때)

 RANK() OVER(ORDER BY 조건컬럼명 [ASC|DESC])

 

 

문제 3) 

EMP 테이블에서 사원들의 EMPNO, ENAME, SAL 급여 순위를 출력하라

EMP 테이블에서 SAL 컬럼을 급여가 많은대로 오름차순의 순위와 내림차순의 순위를 출력한것이다

 

 

문제 4) 

학생 테이블에서 이름과 학년 키를 출력하되 그 학년에서 키가 몇순위인지 큰 키부터 내림차순하여 출력하라

PARTITION 은 낮은거부터 순서대로 정렬해준다.

그러므로 GRADE컬럼에서 HEIGHT 키 순대로 낮은거 부터 정렬한다는 의미이다

하지만 문장 맨 마지막에 DESC가 있으므로 반대로 큰거부터 순위를 정해서 출력한다

 큰 키 부터 출력한다는 의미이다.

1학년에서 1~5순위까지 출력하고 그다음 2학년 1~5순위 3학년 1~5순위 4학년 1~5순위 로 키가 큰 순서대로 출력.

 

 

출처 : https://jinseok12.tistory.com/76

반응형
Comments