来自论坛上的一个帖:
【问题】
有以下一张表:
/**创建测试用表**/
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的情况也列出来。我实在想不出来了,求助大家帮帮忙,谢谢了
就是多出来的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