SQL

MySQL) Ollivander's Inventory

Zin0_0 2020. 6. 3. 18:41
반응형

Ollivander's Inventory

 

Ollivander's Inventory | HackerRank

Help pick out Ron's new wand.

www.hackerrank.com

참 어렵지 않은 것 같으면서도 어려운 문제였다. 결론적으로 내 힘으로 풀지 못했다.

같은 코드에서 돈이 최소로 드는 지팡이 중에 힘이 센 순서대로, 연식이 오래된 순서대로 보여주는 쿼리문을 작성하라고 조건이 있는데, 같은 코드에서 돈이 최소인 지팡이만 뽑아내는데 실패했다.

단순히 WANDS와 WANDS_PROPERTY만 INNER JOIN을 통해 엮어주어 실패한 것 같다. ( 아직까지도 조인문을 한번만 이용하고도 풀 수 있는 방법이 있는지 모르겠다. 없을 것 같다..)

 

구글링을 통해 Self Join을 이용하는 방법을 보았다. Self Join에서 먼저, code와 power 별로 지팡이의 가격이 최저가인 테이블 M을 만들어 주었다. 이후, 원래 테이블인 W와 P 테이블을 조인시켜주어 문제를 해결했다.

 

문제의 조건에 따라, Table을 만들어 Self Join을 하는 방법도 머릿속에 남겨둬야 겠다..

 

 

Query

SELECT id,age,M.coins_needed,M.power
FROM (SELECT code, power, MIN(coins_needed) AS coins_needed FROM WANDS GROUP BY code, power) AS M
JOIN WANDS AS W
ON W.code = M.code AND M.power = W.power AND M.coins_needed = W.coins_needed
JOIN WANDS_PROPERTY AS P
ON M.code = P.code
WHERE P.is_evil =0
ORDER BY W.power desc, P.age desc;
반응형