现在的位置: 首页 > 综合 > 正文

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

2013年10月10日 ⁄ 综合 ⁄ 共 1163字 ⁄ 字号 评论关闭
来自论坛上的一个帖:
 
 

【问题】

有以下一张表:
/**创建测试用表**/
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'); 
楼主希望的结果是:
IDBRAND
NUM
1001A
1
1001B
0
1001C
0
1002A
1
1002B
3
1002C
1
1003A
1
1003B
1
1003C
1
1004A
2
1004B
1
1004C
0
1005A
2
1005B
0
1005C
0
描述如下:假设我有如上的数据,表的名字假设为info吧,我想得到如下的的输出,
就是多出来的num字段,是对id和brand组合的计数统计,关键问题是,比如1001和B的组合是没有的,但是也要给出一个0,来表示没有这个组合,其实如果是直接忽略掉次数为0的这种情况是比较简单的,但是一定要把为0的情况也列出来。我实在想不出来了,求助大家帮帮忙,谢谢了
作者 陈字文(热衷于PM\ORACLE\JAVA等,欢迎同行交流):ziwen#163.com 扣扣:4零9零2零1零零

/**对笛卡尔积的结果求根**/
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

抱歉!评论已关闭.