Oracle 根据键计算动态组数

Oracle Count dynamic number of groups based on key

考虑 table:

+--------+-------+
| id     | value |
+--------+-------+
| 1      |   A   |
| 1      |   B   |
| 2      |   A   |
| 2      |   B   |
| 3      |   A   |
| 3      |   B   |
| 3      |   C   |
| 4      |   A   |
+--------+-------+

我想根据 id 列计算 values 的组数。结果将是这样的:

+--------+---------+
| count  | value   |
+--------+---------+
| 2      |   A B   |
| 1      |   A B C |
| 1      |   A     |
+--------+---------+    

请注意,列 value 的基数是动态的。

我尝试过使用一些子查询进行旋转,但我不确定我是否以正确的方式进行。

感谢您提供的任何帮助。

with src_data as (
    select 1 f1, 'A' f2 from dual
    union all
    select 1, 'B' from dual
    union all
    select 2, 'B' from dual
    union all
    select 2, 'A' from dual
    union all
    select 3, 'A' from dual
    union all
    select 3, 'B' from dual
    union all
    select 3, 'C' from dual
    union all
    select 4, 'A' from dual
)
select count(1) cnt, value
from (
    select f1, listagg(f2, ' ') within group(order by f2) value
    from src_data
    group by f1
)
group by value
order by cnt desc, value

fiddle