[英]psql filter rows on an aggregate function
我有下表:
+------+-----------+-------------+--------------+
| year | team_name | player_name | total_points |
+------+-----------+-------------+--------------+
| 1992 | Magic | Shaq | 2000 |
+------+-----------+-------------+--------------+
| 1992 | Magic | Steve Kerr | 4000 |
+------+-----------+-------------+--------------+
| 1996 | Lakers | Shaq | 2300 |
+------+-----------+-------------+--------------+
| 1996 | Lakers | Magic | 1000 |
+------+-----------+-------------+--------------+
| 2004 | Heat | Shaq | 3000 |
+------+-----------+-------------+--------------+
我正在尝试编写一个查询来查找沙克得分最高的所有球队。
这是我的尝试:
SELECT year, team, MAX(total_points) FILTER(WHERE player_name = 'Shaq'
FROM basketball
GROUP BY year, team;
这显然是不正确的。 我认为我错误地使用了 FILTER,因为我无法找到 Shaq 在该球队中得分最高的球队
正确的表应该只有第三行和最后一行
你很亲密。 您想要一个HAVING
子句将球队的年度最高分与沙克的积分进行比较,并且只保留匹配的那些。
SELECT year, team, MAX(total_points)
FROM basketball
GROUP BY year, team
HAVING MAX(total_points) = MAX(total_points) FILTER (WHERE player_name = 'Shaq');
询问 -
select year, team_name,high_score from (
select *,
max(total_points) over (partition by year, team_name) high_score
from basketball) t
where t.total_points = t.high_score
and t.player_name='Shaq'
小提琴。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.