首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >sql中的Group和最小聚合器(带联接)

sql中的Group和最小聚合器(带联接)
EN

Stack Overflow用户
提问于 2017-10-26 04:14:14
回答 2查看 4.6K关注 0票数 0

我正在尝试教授我的sql,并且正在做hackerrank练习问题。我偶然发现了奥利万德的盘点问题,上面写着:哈利波特和他的朋友们在奥利凡德和罗恩在一起,终于取代了查理的旧魔杖。赫敏决定了最好的选择方式是确定购买每一个高功率和年龄的非邪恶魔杖所需的黄金帆船的最低数量。编写一个查询,打印罗恩感兴趣的魔杖的id、age、coins_needed和power,并按降幂排序。如果一个以上的魔杖具有相同的力量,按下降年龄的顺序排序结果。这里是获得更多细节的链接。它对我的解决方案不满意,我认为这与我的小组特别有关。我所做的事情有什么不对,我该如何解决呢?我是否可以做同样的小修改以使其正确(即仍然使用group by子句)?

赫敏决定了最好的选择方式是确定购买每一个高功率和年龄的非邪恶魔杖所需的黄金帆船的最低数量。编写一个查询,打印罗恩感兴趣的魔杖的id、age、coins_needed和power,并按降幂排序。如果一个以上的魔杖具有相同的力量,按下降年龄的顺序排序结果。

代码语言:javascript
复制
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; 

我很感激你的建议!谢谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-10-26 04:36:19

它不满意w.idgroup by子句的结合。基本上,可以有多个w.id对应于同一个w.power, wp.age配对,您知道您想要的是对应于min条目的ID,但这不是(直接)合法的min

相反,您需要使用子查询。把这个问题分成两部分:

  1. 确定获得给定能力和年龄的魔杖的最小硬币数(我使用了代码,因为它们是一对一映射的,避免了连接)。
  2. 确定哪个ID对应于该魔杖
  3. 对结果的最低价格子集进行筛选和排序。

换句话说(使用JOIN,因为它是一般偏爱),

代码语言:javascript
复制
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; 
票数 2
EN

Stack Overflow用户

发布于 2022-07-16 06:53:20

代码语言:javascript
复制
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;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46945754

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档