You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PostgreSQL按列唯一值求数组最大值,窗口函数报错求助

解决PostgreSQL中按城市求数组元素最大值的SQL报错问题

你的SQL报错是因为同时混用了窗口函数和GROUP BY:窗口函数max(element) OVER(PARTITION)会为每一行返回对应分区的最大值,但后续GROUP BY listed_in_city时,这个窗口函数生成的列既没有被纳入GROUP BY分组条件,也没有用聚合函数处理,违反了PostgreSQL的分组规则,因此触发错误。

解法一:使用聚合函数(推荐)

直接展开数组后按城市分组,用聚合函数MAX()提取每个城市的最大rest_type元素,这是最简洁高效的方式:

SELECT listed_in_city, MAX(element) AS max_rest_type
FROM (
    SELECT unnest(rest_type) AS element, listed_in_city 
    FROM zomato
) a
GROUP BY listed_in_city;

解法二:使用窗口函数(满足你的需求)

如果一定要用窗口函数实现,可以先通过窗口函数计算每个城市的最大值,再用DISTINCT去重得到每个城市的唯一结果:

SELECT DISTINCT listed_in_city, MAX(element) OVER(PARTITION BY listed_in_city) AS max_rest_type
FROM (
    SELECT unnest(rest_type) AS element, listed_in_city 
    FROM zomato
) a;

内容的提问来源于stack exchange,提问作者Zecharia Paras

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 09:16:15