我正在尝试教授我的sql,并且正在做hackerrank练习问题。我偶然发现了奥利万德的盘点问题,上面写着:哈利波特和他的朋友们在奥利凡德和罗恩在一起,终于取代了查理的旧魔杖。赫敏决定了最好的选择方式是确定购买每一个高功率和年龄的非邪恶魔杖所需的黄金帆船的最低数量。编写一个查询,打印罗恩感兴趣的魔杖的id、age、coins_needed和power,并按降幂排序。如果一个以上的魔杖具有相同的力量,按下降年龄的顺序排序结果。这里是获得更多细节的链接。它对我的解决方案不满意,我认为这与我的小组特别有关。我所做的事情有什么不对,我该如何解决呢?我是否可以做同样的小修改以使其正确(即仍然使用group by子句)?
赫敏决定了最好的选择方式是确定购买每一个高功率和年龄的非邪恶魔杖所需的黄金帆船的最低数量。编写一个查询,打印罗恩感兴趣的魔杖的id、age、coins_needed和power,并按降幂排序。如果一个以上的魔杖具有相同的力量,按下降年龄的顺序排序结果。
select w.id, wp.age, min(w.coins_needed), w.power
from wands as w, wands_property as wp
where w.code = wp.code and wp.is_evil = 0
group by w.power, wp.age
order by w.power desc, wp.age desc; 我很感激你的建议!谢谢!
发布于 2017-10-26 04:36:19
它不满意w.id与group by子句的结合。基本上,可以有多个w.id对应于同一个w.power, wp.age配对,您知道您想要的是对应于min条目的ID,但这不是(直接)合法的min。
相反,您需要使用子查询。把这个问题分成两部分:
换句话说(使用JOIN,因为它是一般偏爱),
select w.id, wp.age, s.min_coins_needed, s.power
from (select code, power, min(coins_needed) as min_coins_needed
from wands
group by power, code) as s
left join wands w
on w.coins_needed = s.min_coins_needed and w.code = s.code and w.power = s.power
left join wands_property as wp
on w.code = wp.code
where wp.is_evil = 0
order by s.power desc, wp.age desc; 发布于 2022-07-16 06:53:20
SELECT
w.id,
wp.age,
w.coins_needed,
w.power
FROM
Wands w
LEFT JOIN Wands_property wp ON
w.code = wp.code
WHERE
w.coins_needed =
(
SELECT
MIN(coins_needed) AS min_coins_needed
FROM
Wands w1
LEFT JOIN Wands_property wp1 ON
w1.code = wp1.code
WHERE
wp1.is_evil = 0 AND
w1.power = w.power AND
wp1.age = wp.age
)
ORDER BY
w.power DESC,
wp.age DESC;https://stackoverflow.com/questions/46945754
复制相似问题