Mysql 문제풀이 강의 해설 SET3

🌹Haeri Lee·2023년 4월 23일
0
post-custom-banner

📌 Ollivander's Inventory

출처: https://www.hackerrank.com/challenges/harry-potter-and-wands/problem?isFullScreen=true

풀어야하는 포인트
*) 같은 AGE와 POWER에서는 COINS_NEEDED가 가장 작은걸 출력

[내가 작성한 쿼리] - 오답 
SELECT w.id, wp.age, MIN(w.coins_needed) OVER (PARTITION BY wp.age) as min_coins, w.power
FROM Wands W
    INNER JOIN Wands_Property WP ON W.CODE = WP.CODE
WHERE WP.is_evil = 0
ORDER BY w.power, wp.age


[정답 쿼리]
SELECT id, age, coins_needed, power
FROM(
    SELECT w.id, wp.age, w.coins_needed, w.power, ROW_NUMBER() OVER(PARTITION BY age,power ORDER BY coins_needed) rn 
    ㄴ 같은 나이와 같은 힘을 가지고 있으면 그 파티션 안에서 가장 저렴한 COINS을 추출하기
    FROM Wands W
        INNER JOIN Wands_Property WP ON W.CODE = WP.CODE
    WHERE WP.is_evil = 0
    ORDER BY w.power, wp.age ) t
WHERE rn=1 -- 파티션 안에서 랭킹이 1인 WANDS들만 뽑기
ORDER BY power DESC, age DESC

📌 Weather Observation Station 20

출처: https://www.hackerrank.com/challenges/weather-observation-station-20/problem

[oracle 함수 문 사용]
SELECT ROUND(MEDIAN(LAT_N),4)
FROM STATION

[WINDOW 함수1]
SELECT ROUND(AVG(LAT_N,4)) -- 평균을 내줘 
FROM(
	SELECT ROW_NUMBER() OVER (ORDER BY LAT_N) AS ROW_NUM -- 순위
       	   ,COUNT(*) OVER()N --총 데이터 개수
           ,LAT_N
FROM STATION 
) T
WHERE CASE WHEN MOD(N,2) = 1 THEN ROW_NUM =(N+1)/2 --전체 행의 개수가 홀수 일 때에는 (N+1)/2 지점에 위치해 있는 얘를 데려와 
           ELSE ROW_NUM IN (N/2, (N/2)+1) -- 그 외 행의 개수가 짝수개일 떄는 2개를 들고와서
      END

[WINDOW 함수2]
SELECT ROUND(AVG(LAT_N),4)
FROM(
SELECT LAT_N
        ,PERCENT_RANK() OVER (ORDER BY LAT_N) P_RN
FROM STATION ) T
WHERE P_RN = 0.5


















profile
안녕하세요 공부한 내용을 기록하기 위해서 시작했습니다.
post-custom-banner

0개의 댓글