我正在尝试从以下查询中获取一行结果(如果它是一个平局,则为两个或更多)。问题是,它返回了三行,而不仅仅是包含具有最高总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
答案 0 :(得分:2)
您需要将hp
和shield
一起添加以获得总体健康状况。然后,您可以使用排名函数来获取具有最高值的行。因此,假设hp
和shield
不是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;