2016-03-03 27 views
0

我想从下面的查询中拉出一行结果(两个或更多,如果它是一条领带)。问题是,它返回三行,而不仅仅是一行,其中包含总HP最高的unit_name,这是HP和Shields的组合。查询返回两个表上的最高值和名称两列

查询英文 哪个单位有最全面的防御?

查询...

select unit_name, max(hp + shield) as totalHealth 
from 
(
select unit_name, hp, shield from units 
where hp = (select max(hp) from units) 
union 
select unit_name, hp, shield from units 
where shield =(select max(shield) from units) 
) d 
group by unit_name 

结果...

unit_name  totalhealth 
Archon   360 
Battlecruiser 550 
Mothership  700 

我希望查询将只返回母船和700, 这样的事情....

unit_name  totalHealth 
Mothership  700 

我使用的是postgres

回答

2

您需要添加hpshield以获得总体健康状况。然后,您可以使用排名函数来获取最高值的行。因此,假设hpshieldNULL

select u.* 
from (select u.unit_name, sum(hp + shield) as totalhealth, 
      rank() over (order by sum(hp + shield) desc) as seqnum 
     from units u 
     group by unit_name 
    ) u 
where seqnum = 1; 
+0

真棒,谢谢你的解释。 – user3622460