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
相关产品推荐
相关产品推荐

