通过笛卡尔积解决无关联的问题

来自论坛上的一个帖:
【问题】
有以下一张表:
/**创建测试用表**/
CREATE TABLE info(
ID VARCHAR2(10),
brand VARCHAR2(2)
);
/**插入测试数据**/
insert into info values('1001','A');
insert into info values('1002','A');
insert into info values('1002','B');
insert into info values('1002','B');
insert into info values('1002','B');
insert into info values('1002','C');
insert into info values('1003','A');
insert into info values('1003','B');
insert into info values('1003','C');
insert into info values('1004','A');
insert into info values('1004','A');
insert into info values('1004','B');
insert into info values('1005','A');
insert into info values('1005','A');

楼主希望的结果是:
ID BRAND NUM
1001 A 1
1001 B 0
1001 C 0
1002 A 1
1002 B 3
1002 C 1
1003 A 1
1003 B 1
1003 C 1
1004 A 2
1004 B 1
1004 C 0
1005 A 2
1005 B 0
1005 C 0

描述如下:假设我有如上的数据,表的名字假设为info吧,我想得到如下的的输出,
就是多出来的num字段,是对id和brand组合的计数统计,关键问题是,比如1001和B的组合是没有的,但是也要给出一个0,来表示没有这个组合,其实如果是直接忽略掉次数为0的这种情况是比较简单的,但是一定要把为0的情况也列出来。我实在想不出来了,求助大家帮帮忙,谢谢了


/**对笛卡尔积的结果求根**/
SELECT A.ID,
B.BRAND,
SQRT(SUM(CASE WHEN A.ID=B.ID AND A.BRAND=B.BRAND THEN 1 ELSE 0 END)) AS NUM
FROM INFO A, INFO B
GROUP BY A.ID,B.BRAND
ORDER BY 1, 2

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值