如何使大量数据的统计效率高

snvan 2011-01-30 08:35:02
有这样的一个表结构ckmx
ck(仓库号),djh(订单号),hpdj(货品单价),sl(数量),xh(序号),zje(总金额)。。。其他字段忽略
01,01, 10, 1, 1, 10
01, 01, 5, 2, 2, 10
01, 02, 2, 1, 1, 2
02, 01, 3, 1, 1, 3
结构大概就这样,这个表里面有数十万条纪律,现在需要统计,每个仓库每张订单的平均金额,每个仓库平均每张单据的货品数量
由于需要多次统计,但是我只会简单的查询语句,很耗时
请大虾们帮帮给个效率高的算法
...全文
164 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
AcHerat 2011-01-30
  • 打赏
  • 举报
回复

--补充
select ck,djh,avg(zje)aje,sum(sl)*1./count(djh)
from tb
group by ck,djh
AcHerat 2011-01-30
  • 打赏
  • 举报
回复

select ck,djh,avg(zje)aje,sum(sl)
from tb
group by ck,djh
snvan 2011-01-30
  • 打赏
  • 举报
回复
没表达清楚,zje这个是一个订单内单个货品的累计金额,要算的平均金额是订单的平均金额,即是以ck、djh确定的一个订单的所有货品的金额,然后算平均
feixianxxx 2011-01-30
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 rucypli 的回复:]

SQL code
select ck,djh,avg(zje),avg(sl)
from tb
group by ck,djh
[/Quote]
就这个

create index in_c_d on tb(ck,djh)
rucypli 2011-01-30
  • 打赏
  • 举报
回复
select ck,djh,avg(zje),avg(sl)
from tb
group by ck,djh
叶子 2011-01-30
  • 打赏
  • 举报
回复

declare @ckmx table
(ck varchar(2),djh varchar(2),hpdj decimal(6,2),sl int,xh int,zje decimal(6,2))
insert into @ckmx
select '01','01',10,1,1,10 union all
select '01','01',5,2,2,10 union all
select '01','02',2,1,1,2 union all
select '02','01',3,1,1,3

select ck,
[每张订单的平均金额]=sum(isnull(zje,0.00))/sum(isnull(sl,0)) ,
平均每张单据的货品数量=cast(sum(isnull(sl,0)) as float) /count(djh)
from @ckmx group by ck
/*
ck 每张订单的平均金额 平均每张单据的货品数量
---- --------------------------------------- ----------------------
01 5.500000 1.33333333333333
02 3.000000 1
*/

ck加索引 数量和金额加复合索引。
AcHerat 2011-01-30
  • 打赏
  • 举报
回复

--1:
select ck,djh,avg(zje)aje
from tb
group by ck,djh

--2:
select ck,sum(sl)*1./(select count(distinct djh) from tb where ck = t.ck)
from tb t
group by ck

27,579

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧