急求 群的 组合 算法

大力 2011-05-22 12:47:30
表的内容大概如下, 用一群组(GROUP_ID)中的一个USER和其它所有群组中的任意的一个user 组合。
找出所有的组合方式, 群组的数量是不定的。


[USER] [GROUP_ID]
A1 | G1
B2 | G1

A2 | G2
B4 | G2

A4 | G3
B5 | G3
C1 | G3
...

结果举例:

ID USER
1 A1
1 A2
1 A4

2 A1
2 A2
2 B5

3 A1
3 A2
3 C1

4 A1
4 B4
4 A4

5 A1
5 B4
5 B5

6 A1
6 B4
6 C1

7 B2
7 A2
7 A4

8 B2
8 A2
8 B5

9 B2
9 A2
9 C1

10 B2
10 B4
10 A4

11 B2
11 B4
11 B5

12 B2
12 B4
12 C1

...





...全文
105 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
304的的哥 2011-05-22
  • 打赏
  • 举报
回复
[Quote=引用楼主 pire 的回复:]
表的内容大概如下, 用一群组(GROUP_ID)中的一个USER和其它所有群组中的任意的一个user 组合。
找出所有的组合方式, 群组的数量是不定的。
[/Quote]

--按照你的意思,应该是要得到笛卡尔积,但是计算得到的结果,与你提供的数据不一致:
SQL> --this is a Cartesian-product
SQL> with ta as(
2 select 'A1' unm,'G1' g_id from dual union all
3 select 'B1','G1' from dual)
4 ,tb as(
5 select 'A2' unm,'G2' g_id from dual union all
6 select 'B4','G2' from dual)
7 ,tc as(
8 select 'A4' unm,'G3' g_id from dual union all
9 select 'B5','G3' from dual union all
10 select 'C1','G3' from dual)
11 ,td as(
12 select rownum rn,a.unm nm1,b.unm nm2,c.unm nm3
13 from ta a,tb b,tc c)
14 select rn,nm
15 from (
16 select rn,nm1 nm
17 from td
18 union all
19 select rn,nm2
20 from td
21 union all
22 select rn,nm3
23 from td)
24 group by rn,nm
25 /

RN NM
---------- --
1 A1
1 A2
1 A4
2 A1
2 A2
2 B5
3 A1
3 A2
3 C1
4 A1
4 A4
4 B4
5 A1
5 B4
5 B5
6 A1
6 B4
6 C1
7 A2
7 A4
7 B1
8 A2
8 B1
8 B5
9 A2
9 B1
9 C1
10 A4
10 B1
10 B4
11 B1
11 B4
11 B5
12 B1
12 B4
12 C1

36 rows selected
304的的哥 2011-05-22
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 pire 的回复:]
我的大概意思和你提供的一致.
只是 当前你提供的是3个群组的做法.
如我之前提到的 " 群组的数量是不定的 " 就是 还有可能出现 G4, G5 ...

请问能够有解法吗 ? 谢谢!
[/Quote]
不管你有多少个组,你都是求笛卡尔积,求笛卡尔积的话只能这么做了......
大力 2011-05-22
  • 打赏
  • 举报
回复
附上表结构 和 数据, 希望大家帮忙, 谢谢!!

CREATE TABLE U01
(
U_ID VARCHAR2(18 BYTE),
G_ID VARCHAR2(18 BYTE)
)

commit;

insert into u01 values('A1','G1');
insert into u01 values('B2','G1');
insert into u01 values('A2','G2');
insert into u01 values('B4','G2');
insert into u01 values('A4','G3');
insert into u01 values('B5','G3');
insert into u01 values('C1','G3');
commit;

注意, 数据只是以 3 个群组举例, 有可能还有其它群组 G4,G5...
大力 2011-05-22
  • 打赏
  • 举报
回复
感谢 BOBO12082119 回复
数据不一,是因为 你的第三行写错了. 3 select 'B1','G1' from dual)
B1 应该改为 B2.

我的大概意思和你提供的一致.
只是 当前你提供的是3个群组的做法.
如我之前提到的 " 群组的数量是不定的 " 就是 还有可能出现 G4, G5 ...

请问能够有解法吗 ? 谢谢!
tangren 2011-05-22
  • 打赏
  • 举报
回复
描述不清楚
组合,上面GROUP_ID哪里去了,下面的ID怎么来的?

17,086

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧