通过笛卡尔积解决无关联的问题
来自论坛上的一个帖: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');
楼主希望的结果是:IDBRAND NUM1001A 11001B 01001C 01002A 11002B 31002C 11003A 11003B 11003C 11004A 21004B 11004C 01005A 21005B 01005C 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 NUMFROM INFO A, INFO B GROUP BY A.ID,B.BRANDORDER BY 1, 2
- 1楼chenro昨天 15:00
- 关联后 用distinct 行不行
- Re: ziwen00昨天 15:30
- 回复chenron这种方式,估计只能用在少量的语句的时候,否则很容易出现问题的..n上面的例子只有14条数据 14*14 =196nn但是如果例子上面有10000条数据,那么10000*10000=1亿 结果集.很恐怖很恐怖的效率.