我写了下面的查询,给出了结果集-
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;结果集:
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,需要显示两行
C-3 PO | Bespin
C-3 PO | Tattoine对于Chewbacca,要显示一行
Chewbacca | Endor我所面临的问题是因为我无法实现中间表的条件。
发布于 2017-06-12 07:22:29
编辑(删除了我以前的答案)
您还可以通过HAVING子句中的关联子查询实现相同的目标:
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_name和planet_name。如果只想使用最后两列,请从主查询中删除sum(b.departure - b.arrival) as screen_time:
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:我以前的答案没有用。真对不起。
发布于 2017-06-12 07:52:03
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通常足够聪明,不会执行相同的查询两次。
实现这一目标还有其他方法。你也可以试试,如果你喜欢的话:保留某一列的分组最大值的行。
https://stackoverflow.com/questions/44491604
复制相似问题