SQL

SQL 12(데이터 분석 함수로 순위 출력하기/DENSE_RANK + extract)

아리빠 2023. 5. 10. 20:04

1. 직업이 ANALST, MANAGER 인 사원들의 이름, 직업, 월급, 월급의 순위를 출력하고자 한다 

순위 1위인 사람이 2명일때 다음 순위가 3위가 아닌 2위가 되도록 출력하기

rank는 1 1 ->3

dense rank 는 1 1 ->2

로 출력해준다

 


2. 81년도에 입사한 사원들의 직업, 이름, 월급, 순위를 출력하는데, 직업별로 월급이 높은 순서대로 순위 부여하기

1981년에 입사한 사원들에 대한 조건을 간단히 해보고 싶어 작성해본 hiredate = to_date('1980', 'RRRR') 쿼리가 오류가 발생했다.

어떻게 입력해야 가능할라나,,

 

##공부하다가 알아냈는데 첫 줄 쿼리터 잘못짰다

직업별 월급이 높은 순서니까 dense_rank() over(partition by job order by sal desc)가 되어야한다,,,

 

where절에선 

 

mysql에선 where year(hiredate) = 1981 이 가능하지만 

 

sql에선 extract 함수를 사용해줘야한다

●EXTRACT란?


EXTRACT 함수는 SQL에서 날짜와 시간 값에서 지정된 구성 요소를 추출하는 함수

이 함수를 사용하여 날짜와 시간 값을 분리하여 필요한 정보를 가져올 수 있다

EXTRACT(unit FROM datetime_expression)

unit은 추출하려는 구성 요소를 지정하는 부분으로datetime_expression은 추출하려는 날짜 또는 시간 값을 나타낸다

YEAR 또는 YYYY: 날짜 또는 시간 값의 연도를 추출
MONTH 또는 MM: 날짜 또는 시간 값의 월을 추출
DAY 또는 DD: 날짜 또는 시간 값의 일을 추출
HOUR 또는 HH: 시간 값의 시간을 추출
MINUTE 또는 MI: 시간 값의 분을 추출
SECOND 또는 SS: 시간 값의 초를 추출

 

ex) 날짜 값을 사용하여 연도, 월, 일을 추출하는 예시코드

SELECT EXTRACT(YEAR FROM hiredate) AS hireyear,
       EXTRACT(MONTH FROM hiredate) AS hiremonth,
       EXTRACT(DAY FROM hiredate) AS hireday
FROM employees;

++ between and 사용하는 코딩