繁体   English   中英

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

[英]How to solve this query using With clause and sub-query?

我正在尝试从hackerrank挑战中练习,但无法理解查询。 这是哈利波特和他的朋友们在奥利凡德和罗恩的问题,最终取代了查理的旧魔杖。

赫敏决定最好的选择方法是确定购买每根具有高功率和年龄的非邪恶魔杖所需的最少金帆船数量。 编写一个查询以打印 Ron 感兴趣的魔杖的 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)
  • 这部分我理解,但 rest 部分我无法弄清楚逻辑。

也请使用 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 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM