Study/class note

sql 기본 / 데이터분석 함수 (rank)

chanzae 2021. 11. 8. 16:53

041 데이터 분석 함수로 순위 출력하기 1(RANK)

rank() over (order by 컬럼명)

: over 확장하다는 뜻. 즉, over 다음에 나오는 괄호안의 내용으로 확장해서 rank를 출력하겠다는 뜻

문제165. 이름, 월급, 월급에 대한 순위를 출력하시오

select ename, sal, rank() over (order by sal desc) as 순위
 from emp;

문제166. 직업이 ANALYSTE, MANAGER인 사원들의 이름, 직업, 월급과 월급에 대한 순위를 출력하세요

select ename, job, sal, rank() over (order by sal desc) as 순위
 from emp
 where job in ('ANALYST','MANAGER');

문제167. 이름, 나이, 나이에 대한 순위를 출력하세요(나이가 높은 학생순으로 순위를 부여하시요)

select ename, age, rank() over (order by age desc) as 순위
 from emp14;

ㅇrank() 괄호는 보통 비워두는데 채우는 경우는 다음의 문제를 풀 때

문제168. 월급이 2850은 사원 테이블 전체에서 월급의 순위가 몇 위인가

select rank(2850) within group (order by sal desc) as 순위
 from emp;

rank(키워드) within group ( order by 컬럼명) : 기준 그룹 안에서 키워드가 몇번째 순위에 있는지 찾아낼 때 사용

within group 은 '어느 group 이내에' 라는 뜻

+) rank() 괄호안에 키워드를 넣은 경우에는 다른 컬럼들과 같이 출력할 수 없음. 오직 키워드의 값(순위)만 찾아내려는 것

문제169. 28살은 우리반에서 나이의 순위가 몇 위인가

select rank(28) within group (order by age desc) as 순위
 from emp14;
 --인원수 기준 등수
 
select dense_rank(28) within group (order by age desc) as 순위
 from emp14;
 --인원수를 제외한 등수 기준, 중복데이터는 공동으로 하나의 순위를 부여 받음.

문제170. 이름, 입사일, 순위를 출력하는데 순위가 먼저 입사한 사원순으로 순위를 부여하시오.

select ename, hiredate, rank() over (order by hiredate asc)
 from emp;

문제171. crime_loc테이블에서 범죄의 종류가 어떻게 되는지 중복제거해서 출력하시오

select distinct(crime)
 from crime_loc;

문제172. (오늘의 마지막 문제) 살인이 일어난 장소, 건수, 순위를 출력하세요.(순위는 건수가 높은 순서대로 부여하시오)

select loc, ccount, rank() over (order by ccount desc) as 순위
 from crime_loc
 where crime = '살인';

 

반응형