Algorithm


Problem Name: Sql - Ollivander's Inventory

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

In this HackerRank Functions in SQL 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.

Input Format

The following tables contain data on the wands in Ollivander's inventory:

  • Wands: The id is the id of the wand, code is the code of the wand, coins_needed is the total number of gold galleons needed to buy the wand, and power denotes the quality of the wand (the higher the power, the better the wand is).

  • Wands_Property: The code is the code of the wand, age is the age of the wand, and is_evil denotes whether the wand is good for the dark arts. If the value of is_evil is 0, it means that the wand is not evil. The mapping between code and age is one-one, meaning that if there are two pairs, (code1, age1) and (code2,age2) then code2 not= code2 and age1 not= age2.


    Sample Input

    Wands Table: Wands_Property Table:

    Sample Output

    9 45 1647 10
    12 17 9897 10
    1 20 3688 8
    15 40 6018 7
    19 20 7651 6
    11 40 7587 5
    10 20 504 5
    18 40 3312 3
    20 17 5689 3
    5 45 6020 2
    14 40 5408 1
    

 

 

Code Examples

#1 Code Example with SQL

Code - SQL


SELECT WANDS.ID,
       MIN_PRICES.AGE,
       WANDS.COINS_NEEDED,
       WANDS.POWER
FROM WANDS
INNER JOIN
  (SELECT WANDS.CODE,
          WANDS.POWER,
          MIN(WANDS_PROPERTY.AGE) AS AGE,
          MIN(WANDS.COINS_NEEDED) AS MIN_PRICE
   FROM WANDS
   INNER JOIN WANDS_PROPERTY ON WANDS.CODE = WANDS_PROPERTY.CODE
   WHERE WANDS_PROPERTY.IS_EVIL = 0
   GROUP BY WANDS.CODE,
            WANDS.POWER) MIN_PRICES ON WANDS.CODE = MIN_PRICES.CODE
AND WANDS.POWER = MIN_PRICES.POWER
AND WANDS.COINS_NEEDED = MIN_PRICES.MIN_PRICE
ORDER BY WANDS.POWER DESC,
         MIN_PRICES.AGE DESC;
Copy The Code & Try With Live Editor
Advertisements

Demonstration


Previous
[Solved] Top Competitors in SQL solution in Hackerrank
Next
[Solved] Challenges in SQL solution in Hackerrank