我写了sql
select array_agg(id) as ids
from fff
group by a_c_id, a_c_dttm, a_c_code
having COUNT(*)>1
返回结果
{5,9}
{8,12,13}
{6,10}
{7,11}
如何排除每一行中的最大值以获得此结果?
{5}
{8,12}
{6}
{7}
最终目标是获得以下结果:{5,8,12,6,7}
我写了sql
select array_agg(id) as ids
from fff
group by a_c_id, a_c_dttm, a_c_code
having COUNT(*)>1
返回结果
{5,9}
{8,12,13}
{6,10}
{7,11}
如何排除每一行中的最大值以获得此结果?
{5}
{8,12}
{6}
{7}
最终目标是获得以下结果:{5,8,12,6,7}
3条答案
按热度按时间huus2vyu1#
将所有
ids
(组中的max除外)聚合到一个表中:请注意,单元素组也被排除在外,因此不必单独处理它们。
在db<>fiddle.中测试
jv4diomz2#
使用max window函数过滤出每个组的最大id值,因此您可以按以下方式修改查询:
在这里,您不需要
having COUNT(*)>1
,因为一个值(最大值)被过滤掉了,所以返回的组包含多行。要将所有id聚合到一行中,只需删除group by子句即可。
see demo
fkaflof63#
您可能需要将ROW_NUMBER移动到子查询中,某些平台不允许在WHERE语句中使用。