윈도우 함수 (순위함수, 집계함수)
순위 함수 (등수 매기는 함수)
1) RANK
동일 순위는 같은 순위값을 가짐. 순위값은 앞 순위까지의 누적 개수 +1.
EX) 1등 -> 2등 -> 2등 -> 4등
2) DENSE_RANK
동일 순위는 같은 순위값을 가짐. 순위값은 단순하게 앞 순위 +1
EX) 1등 -> 2등 -> 2등 -> 3등
3) ROW_NUMBER
동일 순위라도 각각의 행이 고유의 순위값을 가짐. 중복 X.
EX) 1등 -> 2등 -> 3등
RANK 함수 예제
SELECT a , COUNT(),RANK() OVER(ORDER BY COUNT() DESC) AS RANK -> a별로 그룹핑을 해서 a별 갯수 순위를 내림차 순으로 매김.
FROM A TABLE
GROUP BY a -> 1번으로 실행
2. 집계 함수
COUNT(*) OVER(PARTITION BY a) -> a별로 그룹핑한 후 파티션별 개수로 나눔.
a가 1인 것이 4개면 각각 4,4,4,4로 표시
TOP N 쿼리 (N-숫자)
1. ROWNUM (행 번호)
저장된 데이터를 그대로 두면서 행에 순차적인 번호 부여.
ROWNUM은 1부터 시작하기에 WHERE ROWNUM = 5 -> 아무것도 출력 X. >=로 표현해야 1~5까지 출력.
ORDER BY를 수행한 후에 ROWNUM 조건을 달고 싶으면 ORDER BY절을 서브쿼리로 해야됨. ORDER BY는 맨 마지막에 수행되기 때문 !
순위 함수 주의점 ! RANK, DENSE_RANK, ROW_NUMBER 등에 따라 >=5를 해도 나오는 결과값이 달라질 수 있음 주의
2회차 세션 문제 풀이
1.조건1) first_login_date 컬럼이 2023-01-01 초과인 날짜의 game_account_id, game_actor_id, serverno 를 추출해주세요.
! 문자형 같은 경우는 ' ' 표시 해주기
2.조건1) level 컬럼이 10 초과이고
조건2) serverno컬럼이 1이 아니며
조건3) 아이템 이름컬럼이 레벨업 패키지 또는 시즌패스이고
조건4) 아이템 획득 경로가 상점에서 구매한 경우의
first_login_date, ip_addr, exp, zone_id 를 추출하고 결과값을 first_login_date, ip_addr기준 내림차순으로 정렬해주세요
3.조건1) case when 구문을 사용하여 레벨구간을 아래와 같이 구분해주시고, as 를 사용하여 컬럼이름을 ‘levelgroup’ 으로 설정해주세요.
SELECT game_actor_id,
level,
CASE WHEN level BETWEEN 1 AND 10 THEN '1~10Lv 이하'
WHEN level BETWEEN 11 AND 20 THEN '11~20Lv 이하'
WHEN level BETWEEN 21 AND 30 THEN '21~30Lv 이하'
WHEN level BETWEEN 31 AND 40 THEN '31~40Lv 이하'
WHEN level BETWEEN 41 AND 50 THEN '41~50Lv 이하'
WHEN level BETWEEN 51 AND 60 THEN '51~60Lv 이하'
WHEN level BETWEEN 61 AND 70 THEN '61~70Lv 이하'
WHEN level BETWEEN 71 AND 80 THEN '71~80Lv 이하'
WHEN level BETWEEN 81 AND 90 THEN '81~90Lv 이하'
WHEN level BETWEEN 91 AND 100 THEN '91~100Lv'
END AS 'levelgroup', -> ELSE도 활용 가능 !
first_login_date
FROM marketer_sql_users msu
ORDER BY first_login_date desc
CASE WHEN column THEN ~절 기억해두기!