现在的位置: 首页 > 综合 > 正文

SQLServer2005中的几个统计技巧

2013年10月22日 ⁄ 综合 ⁄ 共 573字 ⁄ 字号 评论关闭

先看下面的一个表格,我们从左边的两列信息来统计出右边的结果。

 

在SQLServer中我们可以用over子句中来代替子查询实现来提高效率,over子句除了排名函数之外也可以和聚合函数配合。实现代码如下:


use

tempdb

go

if

(object_id

('tb'

) is

not

null

)

    drop

table

tb

go

create

table

tb

(name

varchar

(10

),

val

int

)
go

insert

into

tb

select

'aa'

,

10

union

all

select

'aa'

,

20

union

all

select

'aa'

,

20

union

all

select

'aa'

,

30

union

all

select

'bb'

,

55

union

all

select

'bb'

,

45

union

all

select

'bb'

,

0

select

*

,

排名

=

rank

()over

(partition

by

name

order

by

val

)
,

占比

=

cast

(val

*
1.0

/

sum

(val

)over

(partition

by

name

) as

decimal

(2

,

2

))
,

距最大

=

val

-

max

(val

)over

(partition

by

name

)
,

距最小

=

val

-

min

(val

)over

(partition

by

name

)
,

距平均

=

val

-

avg

(val

)over

(partition

by

name

)
from

tb

抱歉!评论已关闭.