首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用max()获取多个行

使用max()获取多个行
EN

Stack Overflow用户
提问于 2017-06-12 04:51:29
回答 2查看 108关注 0票数 3

我写了下面的查询,给出了结果集-

代码语言:javascript
复制
select
    a.character_name,
    b.planet_name,
    sum(b.departure - b.arrival) AS screen_time
from characters a
inner join timetable b
    on a.character_name = b.character_name
group by a.character_name, b.planet_name;

结果集:

代码语言:javascript
复制
Character_name | planet_name | Screen_time
C-3 PO       Bespin         4
C-3 PO       Hoth           2
C-3 PO       Tatooine       4
Chewbacca    Bespin         4
Chewbacca    Endor          5
Chewbacca    Hoth           2
Chewbacca    Tatooine       4

现在,如何选择具有最大值( planet_name )的每个字符的character_name和screen_time。对于ex,对于C-3PO,需要显示两行

代码语言:javascript
复制
C-3 PO | Bespin
C-3 PO | Tattoine

对于Chewbacca,要显示一行

代码语言:javascript
复制
Chewbacca | Endor

我所面临的问题是因为我无法实现中间表的条件。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-06-12 07:22:29

编辑(删除了我以前的答案)

您还可以通过HAVING子句中的关联子查询实现相同的目标:

代码语言:javascript
复制
select
    a.character_name,
    b.planet_name,
    sum(b.departure - b.arrival) as screen_time
from characters a
inner join timetable b
    on a.character_name = b.character_name
group by a.character_name, b.planet_name
having sum(b.departure - b.arrival) = (
    select 
        max(tmp.screen_time)
    from (
        select b.character_name, sum(b.departure - b.arrival) as screen_time
        from timetable b
        group by b.character_name, b.planet_name) tmp
    where a.character_name = tmp.character_name
    group by tmp.character_name);

考虑到您的问题,我不确定您是想检索screen_time,还是只想检索character_nameplanet_name。如果只想使用最后两列,请从主查询中删除sum(b.departure - b.arrival) as screen_time

代码语言:javascript
复制
select
    a.character_name,
    b.planet_name
from characters a
inner join timetable b
    on a.character_name = b.character_name
group by a.character_name, b.planet_name
having sum(b.departure - b.arrival) = (
    select 
        max(tmp.screen_time)
    from (
        select b.character_name, sum(b.departure - b.arrival) as screen_time
        from timetable b
        group by b.character_name, b.planet_name) tmp
    where a.character_name = tmp.character_name
    group by tmp.character_name);   

PS:我以前的答案没有用。真对不起。

票数 1
EN

Stack Overflow用户

发布于 2017-06-12 07:52:03

代码语言:javascript
复制
select character_name, planet_name
from (

    select
        a.character_name,
        b.planet_name,
        sum(b.departure - b.arrival) AS screen_time
    from characters a
    inner join timetable b
        on a.character_name = b.character_name
    group by a.character_name, b.planet_name

) sq
where screen_time = (SELECT MAX(ssq.screen_time) FROM (

    select
        a.character_name,
        b.planet_name,
        sum(b.departure - b.arrival) AS screen_time
    from characters a
    inner join timetable b
        on a.character_name = b.character_name
    group by a.character_name, b.planet_name

) ssq WHERE ssq.character_name = sq.character_name 
);
  • 看到它在木琴中运行

但别担心,表演不应该像最初看上去那么糟糕。MySQL通常足够聪明,不会执行相同的查询两次。

实现这一目标还有其他方法。你也可以试试,如果你喜欢的话:保留某一列的分组最大值的行。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44491604

复制
相关文章

相似问题

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