查询从两列中的两个表返回最高值和名称

时间:2016-03-03 03:37:01

标签: sql postgresql sum max

我正在尝试从以下查询中获取一行结果(如果它是一个平局,则为两个或更多)。问题是,它返回了三行,而不仅仅是包含具有最高总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

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

unit_name      totalHealth
Mothership     700

我正在使用postgres

1 个答案:

答案 0 :(得分:2)

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

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;