SQLServer2005中的几个统计技巧
2009-09-03 21:08
337 查看
先看下面的一个表格,我们从左边的两列信息来统计出右边的结果。
在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
在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
相关文章推荐
- SQLServer2005中的几个统计技巧
- SQLServer2005中的几个统计技巧 收藏 此文于2009-09-04被推荐到CSDN
- SQLServer2005中的几个统计技巧
- SQLServer2005中的几个统计技巧
- SQLServer2005中的几个统计技巧
- SQLServer2005中的几个统计技巧
- SQLServer2005中的几个统计技巧
- 统计的几个小技巧
- DSP6000的几个简单优化技巧
- excel统计技巧
- Java内存管理的几个技巧
- SQLServer2005企业版数据库日志收缩技巧
- DSP6000的几个简单优化技巧
- 本文简要介绍了几个优化 Apache 的技巧
- css水平垂直居中的几个方法和技巧/居中之美
- 在使用代码布局的时候几个技巧,可减少 算坐标的麻烦!!
- 进行数据库设计时不妨请参考如下几个技巧
- 浅谈SSAS计算中MDX性能改进的几个技巧
- [数字技巧]重复数字统计算法的空间优化