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

来源:互联网 发布:xp添加网络win7打印机 编辑:程序博客网 时间:2024/04/30 08:44
来自论坛上的一个帖:
http://topic.csdn.net/u/20120629/17/42812986-cc17-4e1e-ae85-41a5b863e7fe.html?seed=2117250644&r=79002181
 
 
【问题】
有以下一张表:
/**创建测试用表**/
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'); 

楼主希望的结果是:
IDBRANDNUM
1001A1
1001B0
1001C0
1002A1
1002B3
1002C1
1003A1
1003B1
1003C1
1004A2
1004B1
1004C0
1005A2
1005B0
1005C0

描述如下:假设我有如上的数据,表的名字假设为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

原创粉丝点击