HackerRank Ollivander's Inventory problem solution

In this HackerRank Ollivander's Inventory problem solution, Harry Potter and his friends are at Ollivander's with Ron, finally replacing Charlie's old broken wand.

Hermione decides the best way to choose is by determining the minimum number of gold galleons needed to buy each non-evil wand of high power and age. Write a query to print the id, age, coins_needed, and power of the wands that Ron's interested in, sorted in order of descending power. If more than one wand has same power, sort the result in order of descending age.

HackerRank Ollivander's Inventory problem solution


Problem solution MS SQL.

select w.id, wp.age, w.coins_needed, w.power
    from wands w
        inner join wands_property wp on wp.code = w.code
        inner join (
                select wp.age, min(w.coins_needed) 'coins_needed', w.power
                    from wands w
                        inner join wands_property wp on wp.code = w.code
                    where wp.is_evil = 0
                    group by wp.age, w.power
        ) x on x.age = wp.age and x.coins_needed = w.coins_needed and x.power = w.power
    where wp.is_evil = 0
    order by w.power desc, wp.age desc

Problem solution in Oracle.

/*
Enter your query here.
Please append a semicolon ";" at the end of the query and enter your query in a single line to avoid error.
*/
With X as
(select w.id i, p.age a, w.coins_needed c, w.power p from wands w, wands_property p where w.code = p.code and p.is_evil = 0),
Y as (select p.age a, min(w.coins_needed) c, w.power p from wands w, wands_property p where w.code = p.code and p.is_evil = 0 group by w.power, p.age) 
select X.i, X.a, X.c, X.p from X,Y where X.c = Y.c and X.p = Y.p and X.a = Y.a 
order by X.p desc, X.a desc, X.a;


Problem solution in DB2.

SELECT
    W.ID,
    WP.AGE,
    W.COINS_NEEDED,
    W.POWER
FROM WANDS W
INNER JOIN WANDS_PROPERTY WP
    ON WP.CODE = W.CODE
INNER JOIN
(
    SELECT
        MIN(W.COINS_NEEDED) AS COINS_NEEDED,
        W.POWER,
        WP.AGE
    FROM WANDS W
    INNER JOIN WANDS_PROPERTY WP
        ON WP.CODE = W.CODE
    WHERE WP.IS_EVIL = 0
    GROUP BY
        POWER,
        AGE
) WM
    ON WM.COINS_NEEDED = W.COINS_NEEDED
    AND WM.POWER = W.POWER
    AND WM.AGE = WP.AGE
WHERE WP.IS_EVIL = 0
ORDER BY
    W.POWER DESC,
    WP.AGE DESC;


Post a Comment

0 Comments