我编写了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}

推荐答案

将除最大分组外的所有ids个分组汇总到一个表中:

select array_agg(id) as ids
from my_table
where id not in (
    select max(id)
    from my_table
    group by other_col
);

请注意,单元素组也被排除在外,因此您不必单独处理它们.

db<>fiddle.分钟内进行测试

Sql相关问答推荐

PG SQL中按条件聚合值

为什么Postgrs Planner会在输出部分中显示我在查询中不使用的列?'""

SQL—如何在搜索的元素之后和之前获取元素?

SQL查询:合并2个表

在多个联合中使用相同的SELECT SQL查询

更新PostgreSQL 15中的JSON值

如何在snowflake中进行SQL的反向填充

用于过滤嵌套对象或数组中的JSON数据的WHERE条件

PostgreSQL抽奖查询

如何设计一个调用嵌套函数并仅在所有被调用的嵌套函数都提交时才提交的事务,例如,如果一个子函数失败则中止?

在SQL GROUP BY中的某些行之后执行计算

Oracle分层查询-两条路径在末尾合并为一条

如何使用不重复的单个顶级字段(列)向json数组 Select 多行

试图找到两个身份列表的交集(列表的长度不同),但获取列 id 不明确?

如何将 START 和 END 日期之间的日期差异作为 SQL 中的单独列获取

没有调用子查询的嵌套 JOIN语法是什么?

用户定义的标量值函数是否仍然会阻止并行性?

有没有办法在雅典娜中将字符串转换为 int ?

PostgreSQL中如何提取以特定字符开头的字符串中的所有单词?

SQL日期比较用例;月初至今的报告