|
原帖由 yulihua49 于 2010-2-22 11:05 发表 ![]()
如果一定要处理null,建议:
1。去掉primary key
2.所有类似 *node.c1=0; 都改成:
strcpy(node.c1,"\b");
用单一的退格符做归并标志。空串做null标志。
如果是数字类型的,你可以把n个表示器放进树节点,比较器对表示器进行适当的处理即可。
二叉树程序在我给你的blog里有,你下载编译用吧,试试看,哪种方法快。
当然,数据库的访问你用习惯的方法完全可以。
附带说一下,在C里边,处理ORACLE的number类型,可以使用decimal对象,但效率是相当低的,通常还是变成C的int,long,short,double来处理,这时null我通常用一个不常用的值来代替,这样处理问题简单一些,比使用表示器方便。SDBC把null的处理包含在内,对程序员透明了。
你这方法不怎么样。我前面说了,NULL是无可替代的。这里要解决的是区分数据本身的NULL和CUBE组合中产生的NULL, 我给你指出两条明路:
方法1. 引进一个虚拟列,它的值从000到111不等,其实就是把GROUPING函数实现了。这样你的键就变为四个列,各种NULL也就不会混淆。
方法2. 设计8棵树,各管各的数据,反正输出才需要合并。好处是很多树不需要比较三个列,这样就提高效率。
如果真要实现CUBE, 还有很多好玩的思路,除了你的二叉树(SORT GROUP BY), 以及前面说过的HASH GROUP BY, 还可以试试 ROLLUP, 即在前面聚合的基础上再聚合。 |
|