sql - 寻找共享相同值的键的最大组合

标签 sql oracle

这是我的表格:

CREATE TABLE ABC(
 key NUMBER(5), 
 val NUMBER(5)
 );

insert into ABC (key, val) values (1,1);
insert into ABC (key, val) values (1,2);
insert into ABC (key, val) values (1,3);
insert into ABC (key, val) values (2,3);
insert into ABC (key, val) values (1,4);
insert into ABC (key, val) values (2,4); 
insert into ABC (key, val) values (2,5);
insert into ABC (key, val) values (3,5);
insert into ABC (key, val) values (1,6);
insert into ABC (key, val) values (2,6);

所需输出: enter image description here

我想找到共享相同值的最大键对,并将它们列出,在上面的示例中,表中出现的最大键对是(1,2),它们共享值(3,4, 6)

最佳答案

请尝试如下:

select ab,val from (
select rank() over( order by cnt desc) rn, ab, val ,cnt
from (
select listagg(key,',')  within group(order by val) ab,val, 
count(1) over (partition by (listagg(key,',')  within group(order by val))) cnt
from abc
group by val
having count(*) > 1))
where rn = 1;

关于sql - 寻找共享相同值的键的最大组合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65444718/

相关文章:

sql - 按别名分组 (Oracle)

oracle - 我们如何验证 oracle 中的映射文档以确保已提供所有信息?

javascript - 为什么我在使用 node-oracledb 时收到 "NJS-138: connections to this database server version are not supported by node-oracledb in Thin mode"错误

PHP、PDO 和 MYSQL : lastInsertId() returns NULL

mysql - 在sql中找到重复计数4

使用来自 GROUP 或 RANK 的 WHERE 的 SQL 语句(第 2 部分)

sql - SQL COUNT 函数是否自动排除 NULL 值?

sql - 自连接比较来自同一张表的季度数据?

'order by' 不确定时的 SQL 分页

database - 如何在 Oracle SQL Plus 中排列或格式化表结果