SELECT
employee_id,
hire_date,
salary,
RANK() OVER (ORDER BY salary DESC) AS rank
FROM employees
WHERE hire_date BETWEEN '2025-01-01' AND '2025-01-15';
-- WHERE 절과 함께 사용하여 특정 기간 내의 순위도 반영 가능
아래와 같은 lol_users(LOL 유저 테이블)이 있습니다.
id
|
name
|
region
|
rating
|
join_date
|
1
|
르탄이
|
한국
|
1300
|
2019-06-15
|
2
|
배캠이
|
미국
|
1500
|
2020-09-01
|
3
|
구구이
|
한국
|
1400
|
2021-01-07
|
4
|
이션이
|
미국
|
1350
|
2019-11-15
|
21.
lol_users 테이블에서 각 유저의 레이팅(rating) 순위를 계산하는 쿼리를 작성해주세요! 전체 지역(region) 기준이고 순위는 레이팅이 높을수록 높아야해요. (e.g. rating 1400 유저의 순위 > rating 1350 유저의 순위)
> SELECT name, rating, RANK() OVER (ORDER BY rating DESC) AS lol_rank FROM lol_users;
22.
lol_users 테이블에서 가장 늦게 게임을 시작한(join_date) 유저의 이름을 선택하는 쿼리를 작성해주세요
> SELECT name FROM lol_users ORDER BY join_date DESC LIMIT 1;
23.
lol_users 테이블에서 지역별로 레이팅이 높은 순으로 유저들을 정렬해서 나열하는 쿼리를 작성해주세요!
> SELECT * FROM lol_users ORDER BY region, rating DESC;
24.
lol_users 테이블에서 지역별로 평균 레이팅을 계산하는 쿼리를 작성해주세요!
> SELECT region, AVG(rating) AS average_rating FROM lol_users GROUP BY region;
-- 순위를 계산할 때 RANK() 함수를 사용 할 수 있다.
-- RANK() 함수는 윈도우 함수이고 데이터를 정렬한 후 각 행의 순위를 부여하는 데 사용된다.
-- 동일한 값에 대해 동일한 순위를 부여하고, 중복된 순위가 있는 경우 순위를 건너뛴다.
-- OVER와 같이 사용하여 정렬 조건을 지정할 수 있다.
SELECT
employee_id,
salary,
RANK() OVER (ORDER BY salary DESC) AS rank
FROM employees;
SELECT
employee_id,
hire_date,
salary,
RANK() OVER (ORDER BY salary DESC) AS rank
FROM employees
WHERE hire_date BETWEEN '2025-01-01' AND '2025-01-15';
-- WHERE절과 사용하여 특정 기간 동안의 순위도 집계 가능
WHERE vs HAVING:
- 날짜 조건이 순위 계산 이전에 적용 ▷ WHERE 절 사용
- 날짜 조건이 순위 계산 이후에 적용 ▷ 외부 쿼리에서 필터링하거나 HAVING 절 사용 가능.
'SQL' 카테고리의 다른 글
[SQL 기초 연습] 8. LOL을 하다가 홧병이 나서 병원을 찾아왔습니다. (0) | 2025.01.16 |
---|---|
[SQL 기초 연습] 7. 랭크게임 하다가 싸워서 피드백 남겼어요 (0) | 2025.01.16 |
[SQL 기초 연습] 5. 공부하다보니 팀 프로젝트 시간이 왔어요! (0) | 2025.01.15 |
[SQL 기초 연습] 4. 이제 놀만큼 놀았으니 다시 공부해봅시다! (0) | 2025.01.14 |
[SQL 기초 연습] 3. 상품 주문이 들어왔으니 주문을 처리해봅시다! (0) | 2025.01.14 |