如何使用With子句和子查询来解决此查询



我正在尝试从hackerbank挑战中进行练习,但无法理解查询。以下是问题哈利波特和他的朋友们和罗恩在奥利凡德家,终于把查理的旧魔杖换了回来。

赫敏决定,最好的选择是确定购买每根高威力和高年龄的非邪恶魔杖所需的最低数量的黄金大帆船。写一个查询,打印罗恩感兴趣的魔杖的id、年龄、所需硬币和威力,按降序排列。如果不止一根魔杖具有相同的力量,则按年龄递减的顺序对结果进行排序。

这是问题的链接-https://www.hackerrank.com/challenges/harry-potter-and-wands/problem?isFullScreen=true

这是我无法理解的解决方案

SELECT w.id, wp.age, w.coins_needed, w.power
FROM wands w INNER JOIN wands_property wp ON w.code = wp.code
WHERE wp.is_evil = 0 AND w.coins_needed = (SELECT MIN(w2.coins_needed)
FROM wands w2 INNER JOIN wands_property wp2 ON w2.code = wp2.code
WHERE w2.code = w.code AND wp2.is_evil = 0 AND w2.power = w.power)
ORDER BY w.power DESC, wp.age DESC;
(SELECT w.id, wp.age, w.coins_needed, w.power
FROM wands w INNER JOIN wands_property wp ON w.code = wp.code
WHERE wp.is_evil = 0)
  • 这部分我理解,但其余部分我无法理解逻辑

还请使用with子句进行解释

我非常感谢你的建议

只要找到最便宜的魔杖,就可以按功率和年龄订购。

select id
, age 
, coins_needed
, power
from (
SELECT w.id
, wp.age
, w.coins_needed
, w.power
, ROW_NUMBER() over(partition by wp.age,w.power order by w.coins_needed) orderNum
FROM wands w 
INNER JOIN wands_property wp ON w.code = wp.code
WHERE wp.is_evil = 0
) a
where a.orderNum = 1 
order by power desc, age desc 

最新更新