列必须出现在嵌套查询中的分组依据或聚合函数中
Column must appear in group by or aggregate function in nested query
我有以下 table.
Fights (fight_year, fight_round, winner, fid, city, league)
我正在尝试查询以下内容:
对于战斗 table 中出现的每一年,找到举行最多战斗的城市。例如,如果在 1992 年,泽西岛举行的比赛比任何其他城市都多,您应该打印出 (1992, Jersey)
这是我目前的情况,但我不断收到以下错误。我不确定我应该如何按功能构建我的组。
错误:列,'ans.fight_round' 必须出现在 GROUP BY 子句中或在聚合函数中使用。第 3 行来自 (select *
select fight_year, city, max(*)
from (select *
from (select *
from fights as ans
group by (fight_year)) as l2
group by (ans.city)) as l1;
在 Postgres 中,我会推荐聚合和 distinct on
:
select distinct on (flight_year) flight_year, city, count(*) cnt
from flights
group by flight_year, city
order by flight_year, count(*) desc
统计每个城市每年打架次数,保留每年打架次数最多的城市。
如果你想允许平局,那么使用window函数:
select flight_year, city, cnt
from (
select flight_year, city, count(*) cnt,
rank() over(partition by flight_year order by count(*) desc) rn
from flights
group by flight_year, city
) f
where rn = 1
尽管 row_number 是@GMB 所做的最简单的方法。也可以试试这个替代方案
select city, fight_year
from fights
group by city, fightyear
having count(*) = sum(case when fid is not null then 1 end)
我有以下 table.
Fights (fight_year, fight_round, winner, fid, city, league)
我正在尝试查询以下内容:
对于战斗 table 中出现的每一年,找到举行最多战斗的城市。例如,如果在 1992 年,泽西岛举行的比赛比任何其他城市都多,您应该打印出 (1992, Jersey)
这是我目前的情况,但我不断收到以下错误。我不确定我应该如何按功能构建我的组。
错误:列,'ans.fight_round' 必须出现在 GROUP BY 子句中或在聚合函数中使用。第 3 行来自 (select *
select fight_year, city, max(*)
from (select *
from (select *
from fights as ans
group by (fight_year)) as l2
group by (ans.city)) as l1;
在 Postgres 中,我会推荐聚合和 distinct on
:
select distinct on (flight_year) flight_year, city, count(*) cnt
from flights
group by flight_year, city
order by flight_year, count(*) desc
统计每个城市每年打架次数,保留每年打架次数最多的城市。
如果你想允许平局,那么使用window函数:
select flight_year, city, cnt
from (
select flight_year, city, count(*) cnt,
rank() over(partition by flight_year order by count(*) desc) rn
from flights
group by flight_year, city
) f
where rn = 1
尽管 row_number 是@GMB 所做的最简单的方法。也可以试试这个替代方案
select city, fight_year
from fights
group by city, fightyear
having count(*) = sum(case when fid is not null then 1 end)