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
考虑 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