求最简洁方法

[复制链接]
查看11 | 回复9 | 2008-12-24 12:00:59 | 显示全部楼层 |阅读模式
bell6248 的解法已经非常棒了,
还有其他的解法吗??


test:

a b
====
1 1
1null
1 2
2 1
2 2
2 3
result
a sum()
=====
1null
2 6

我现在想通过a分组后求和,如果是没有null的那么正常加,如果有null的则这一组的和为null
求最简洁的方法。
谢谢
[ 本帖最后由 zhitler 于 2008-12-5 17:28 编辑 ]
回复

使用道具 举报

千问 | 2008-12-24 12:00:59 | 显示全部楼层

如下:
SQL> select * from a;
COL_ACOL_B
---------- ----------
1
1
1
1
2
2
1
2
2
2
3
6 rows selected
SQL> select col_a,
2 decode(count(*), count(col_b), sum(col_b), null) sum_col_b
3from a
4group by col_a
5/
COL_ASUM_COL_B
---------- ----------
1
2
6
SQL>

[ 本帖最后由 bell6248 于 2008-12-5 16:18 编辑 ]
回复

使用道具 举报

千问 | 2008-12-24 12:00:59 | 显示全部楼层
SQL> select a,b from test2;

A
B
---------- ----------
2 34
2 34
3 12
3 34
1
1
2
1
2
1
3
1
3
1
3
1

11 rows selected
SQL> select distinct a,'null' count from test2 where b is null
2union
3select a,c from (
4SELECT A, B,
5 to_char(SUM(B) OVER(PARTITION BY A)) c, ROW_NUMBER() OVER(PARTITION BY A ORDER BY B nulls first) rn
6FROM TEST2
7) where rn=1 and b is not null

8;

A COUNT
---------- ----------------------------------------
1 null
2 68
3 46

SQL>
回复

使用道具 举报

千问 | 2008-12-24 12:00:59 | 显示全部楼层
原帖由 bell6248 于 2008-12-5 16:13 发表

如下:
SQL> select * from a;
COL_ACOL_B
---------- ----------
1
1
1
1
2
2
1
2
2
2
3
6 rows selected
SQL> select col_a,
2 decode(count(*), count(col_b), sum(col_b), null) sum_col_b
3from a
4group by col_a
5/
COL_ASUM_COL_B
---------- ----------
1
2
6
SQL>



学习了
回复

使用道具 举报

千问 | 2008-12-24 12:00:59 | 显示全部楼层
二楼的强
回复

使用道具 举报

千问 | 2008-12-24 12:00:59 | 显示全部楼层
null和任何值加建都是NULL,直接分组求和就是了,还用DECODE?
回复

使用道具 举报

千问 | 2008-12-24 12:00:59 | 显示全部楼层
bell6248解法的非常棒
还有其他的解法吗??



原帖由 bell6248 于 2008-12-5 16:13 发表

如下:
SQL> select * from a;
COL_ACOL_B
---------- ----------
1
1
1
1
2
2
1
2
2
2
3
6 rows selected
SQL> select col_a,
2 decode(count(*), count(col_b), sum(col_b), null) sum_col_b
3from a
4group by col_a
5/
COL_ASUM_COL_B
---------- ----------
1
2
6
SQL>

[ 本帖最后由 zhitler 于 2008-12-5 17:29 编辑 ]
回复

使用道具 举报

千问 | 2008-12-24 12:00:59 | 显示全部楼层
select case when count(b)count(a) then null else sum(b) end
from test
group by a
回复

使用道具 举报

千问 | 2008-12-24 12:00:59 | 显示全部楼层
原帖由 itpub_2000 于 2008-12-5 17:45 发表
select case when count(b)count(a) then null else sum(b) end
from test
group by a


这种是最简单的
回复

使用道具 举报

千问 | 2008-12-24 12:00:59 | 显示全部楼层
我觉得上面2种方法差不多。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行