如何在Oracle中编写复杂的查询分组?

如何在Oracle中编写复杂的查询分组?,oracle,group-by,Oracle,Group By,我有一个查询要写关于GROUPBY的一些列,并计算结果集 这是我的要求。我有一个表名table_1,它有3列id、key、value。记录类似于id\u 1 key\u 1 value\u 1。我想找出哪个值在同一id组中,并且在该id组下,所有键都有它们 以下是一个例子: id=id1, key=key1, value=value1 id=id1, key=key1, value=value2 id=id1, key=key2, value=value2 id=id1, key=key2, v

我有一个查询要写关于GROUPBY的一些列,并计算结果集

这是我的要求。我有一个表名table_1,它有3列
id、key、value
。记录类似于
id\u 1 key\u 1 value\u 1
。我想找出哪个
在同一
id
组中,并且在该
id
组下,所有
都有它们

以下是一个例子:

id=id1, key=key1, value=value1
id=id1, key=key1, value=value2
id=id1, key=key2, value=value2
id=id1, key=key2, value=value3
id=id1, key=key3, value=value1
id=id1, key=key3, value=value2
id=id1, key=key3, value=value3

id=id2, key=key1, value=value2
id=id2, key=key1, value=value3
id=id2, key=key2, value=value2
id=id2, key=key2, value=value3
id=id2, key=key3, value=value1
id=id2, key=key3, value=value2
id=id2, key=key3, value=value3
结果应该是
id1,value2
id2,value2
id2,value3

您可以在
id1
下看到所有
key
都有一个值
value2
id2
下的所有
key
都有value
value2
value3

假设(ID、key、value)形成一个唯一的组合,即每个ID每个键只有一个值实例,这应该有效

with data_k as ( select id 
                      , count(distinct key) no_of_key
               from your_table
                group by id )
     , data_v as ( select id 
                      , value
                      , count(*) no_of_value
               from your_table
                group by id, value )
select distinct data_k.id
       , data_v.value
       , data_k.no_of_key 
       , data_v.no_of_value
from data_k
     join data_v on (data_k.id = data_v.id)
where data_k.no_of_key = data_v.no_of_value
order by data_k.id, data_v.value;
我不清楚你期望的实际结果是什么,所以我只是猜测一下预测

此版本有效。

假设(ID、键、值)形成一个唯一的组合,即每个ID每个键只有一个值实例,则此版本有效

with data_k as ( select id 
                      , count(distinct key) no_of_key
               from your_table
                group by id )
     , data_v as ( select id 
                      , value
                      , count(*) no_of_value
               from your_table
                group by id, value )
select distinct data_k.id
       , data_v.value
       , data_k.no_of_key 
       , data_v.no_of_value
from data_k
     join data_v on (data_k.id = data_v.id)
where data_k.no_of_key = data_v.no_of_value
order by data_k.id, data_v.value;
我不清楚你期望的实际结果是什么,所以我只是猜测一下预测


此版本有效。

谢谢您的回答。我认为2个“count over”语句应该是count(key)over(按id分区,value)no_of_key,count(value)over(按id分区,key)no_of_value谢谢你的回答。我认为2个‘countover’语句应该是count(key)over(按id分区,value)no_of_key,count(value)over(按id分区,key)no_of_value