|
|
原帖由 newkid 于 2010-2-18 22:34 发表 ![]()
你的程序和GROUP BY CUBE不等价。
例子:
create table t (c1 varchar2(10),c2 varchar2(10), c3 varchar2(10), amount number);
故意插入一个空列:
insert into t values (1,2,null,1);
select c1,c2,c3,sum(amount) from t group by cube(c1,c2,c3);
C1 C2 C3 SUM(AMOUNT)
-------------------- -------------------- -------------------- -----------
1
1
2 1
2 1
1 1
1 1
1 2 1
1 2 1
8 rows selected.
可以看到有些重复的行,而你的程序会把它们归并到一起。
三个列的组合你似乎写得很辛苦了,四个列应付得了吗?
再给你出个难题:
COUNT(DISTINCT C4)这样的能实现吗?
看我的数据定义,primary key,不可以null的吧?
另外,我还是没彻底弄懂,你上边的列表,什么也没归并啊?都单列着呢?
逻辑上,比如,统计各地区,各民族,各党派的代表人数,不可以null的吧?即使无党派也要给一个代码的吧?
即使有一个null,把它统计在任何党派也不错吧?算法再完善一下(任意党派代码0,数据库里不要用,在DAU里null代码是0x80000000,这样就归并不到一起了)?实在不行,你就用group by cube好了。
C没什么不可以做的,方便就做,不方便你完全可以SQL,ORACLE引擎内部也是C啊。
C写程序是比较费事,我们做一些公用程序可以一定程度减轻负担。怎么方便怎么用,看程序员的了。
“三个列的组合你似乎写得很辛苦了,四个列应付得了吗?”,复制-粘贴吧,两句一项,不怕费事就行。
你一定要用C解决任意语法问题,好办啊,写一个语言解释器,编排执行计划和状态机,处理数据buff,优化策略。。。。。
[ 本帖最后由 yulihua49 于 2010-2-19 10:57 编辑 ] |
|