复杂group by问题求助

[复制链接]
查看11 | 回复7 | 2010-10-8 09:32:26 | 显示全部楼层 |阅读模式
表T中有,表S like 表T
client_nbritem_nbr income
12345
a001
3000
12345
a002
2500
98765
a001
7700
98765
b001
5500
.....

.....
想要选出在client_nbr下面的income合计>10000的纪录,然后
将符合条件的数据插入表T
我的做法是
第一步 插入临时表 M: select client_nbr , sum(income) from 表T group by client_nbr having sum(income) >10000
第二步 插入表Sselect client_nbr , item_nbr , sum(income) from 表T,
临时表 Mwhere T.client_nbr = M.client_nbr group by client_nbr, item_nbr
但是效率不是很高,有没有更好的方法???
回复

使用道具 举报

千问 | 2010-10-8 09:32:26 | 显示全部楼层
select client_nbr , sum(income) from 表T where sum(income) >10000 group by client_nbr
这样可以吗?
回复

使用道具 举报

千问 | 2010-10-8 09:32:26 | 显示全部楼层
不好意思,item_nbr最后一步少不了
回复

使用道具 举报

千问 | 2010-10-8 09:32:26 | 显示全部楼层
我的意思是说:你第一个查询的时候不可以把having后面的那句话变成查询的条件,然后这样不能把速度加快吗?而且请你把你的运行环境和硬件环境贴出来好吗?这都是能影响你的运行速度的
回复

使用道具 举报

千问 | 2010-10-8 09:32:26 | 显示全部楼层
select * from (select client_nbr , item_nbr, sum(income) over (partition byclient_nbr) sum_incoming from 表T) where sum_incoming > 10000
回复

使用道具 举报

千问 | 2010-10-8 09:32:26 | 显示全部楼层
谢谢楼上的方法,但是选出来的sum_income是只按照client_nbr来合计的数,而我所希望的是按照client_nbr和item_nbr得到的合计数,
其实就是1.符合group by client_nbr的合计income > 10000的记录;
2. 再将1为前提的group by client_nbr,item_nbr的合计income插入目标表中
回复

使用道具 举报

千问 | 2010-10-8 09:32:26 | 显示全部楼层
我知道了
select client_nbr, item_nbr, sum_result from (select client_nbr , item_nbr, sum(income) over (partition by client_nbr,item_nbr) sum_result ,sum(income) over (partition by client_nbr) sum_incoming from 表T) where sum_incoming > 10000
不知道这样行不行?
回复

使用道具 举报

千问 | 2010-10-8 09:32:26 | 显示全部楼层
郁闷,又重复行出现,这是我不希望见到的
回复

使用道具 举报

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

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行