sql2000学习笔记之select统计数据

继续上一章对select关键字的学习,这一篇主要说明利用select关键字进行数据的统计。因为在大多数时候,我们要的并不是显示数据库中的原始数据,而是通过计算得到的统计数据,从而进行分析工作。

仍然以northwind数据库进行阐述。

1、需要一张表,包含:交易量最大的5笔交易的信息

分析:按quantity降序排列,利用top n 关键字进行取集。关键点在于,是否考虑并列值,因为可能存在交易量相同的交易,利用with ties将并列值加入结果集

语法:

select [top n [percent]] [with ties]选择列表

from 表名

where 筛选条件

order by 选择列表

with ties 将并列值加入结果集

注:n表示一个整数,代表n行。percent关键字若存在,则表示%n行。

答案:select top 5 with ties orderid,productid,quantity from [order details] order by quantity desc

2、需要一张表,包括:员工总数

分析:这里需要使用集合函数,集合函数用于计算总数,函数执行时,对其作用的表中一列或一组列的值进行总结,并生成单个汇总值。

有下列常用集合函数:

avg(列名):指定字段的平均值,遇到空值则跳过。例如:select avg(freight) from orders,结果为:78.2442

count(*):统计表中的记录条数。例如:select count(*) from employees,结果为:9(本题的答案)

count(列名):指定列的记录条数,遇到空值则跳过。例如:select count(reportsto) from employees,结果为:8(注意,这列存在一个空值)

max(列名):取列中最大值,用于计算的类型既可以是数字也可以是字符串。例如:select max(freight) from orders,结果为:1007.6400

min(列名):取列中最小值,同max。

sum(列名):求列中值的总合,遇到空值则跳过。例如:select sum(freight) from orders,结果为:64942.6900

3、需要一张表,包括:每种产品的销售数量汇总。两列分别为:productid,total_quantity

分析:这张表需要统计后的信息,需要对表中数据按照productid进行分组,将productid相同的行分为一组,最后分别对这些组的quantity进行求和。

语法:

select 选择列表

from 表名

where 筛选条件

group by 需要分组的列表[,需要分组的列表]

[having 筛选条件]

说明:where在group by分组前进行筛选,而having 在group by分组后进行筛选。

答案:select productid,sum(quantity) as total_quantity from [order details] group by productid

当然,为了让结果更便于查看,可以将结果排序,按照total_quantity降序排列:

select productid,sum(quantity) as total_quantity from [order details] group by productid order by total_quantity desc

4、需要一张报表,包含:每种商品的销售总量和销售明细

分析:销售总量和销售明细如果分别处于两张表,都非常好处理。要将两种结果同时放在一张表中,就必须使用compute by关键字。

语法:

select 选择列表

from 表名

where 搜索条件

order by 选择列表

compute 计算表达式 by 列表(必须等于前面order by的列表)

说明:compute前面的4个步骤,用于生成明细,compute用于对明细进行计算,by用于指定compute按照指定的列表中相同的值进行计算。

答案:select orderid,productid,quantity from [order details] order by productid compute sum(quantity) by productid

按照以上的例子:

select...from...order by...是选择相应的列,并按照productid进行升序排列。

compute...by...是在以上结果集的基础上,把productid列中值相同的行的quantity相加,对每种产品输出一个销售总量。

输出的结果如下(部分):

orderid productid quantity
----------- ----------- --------
10285 1 45
10294 1 18
10317 1 20
10348 1 15
10354 1 12
10370 1 15
10406 1 10
10413 1 24
10477 1 15
10522 1 40
10526 1 8
10576 1 10
10590 1 20
10609 1 3
10611 1 6
10628 1 25
10646 1 15
10691 1 30
10689 1 35
10700 1 5
10729 1 50
10752 1 8
10838 1 4
10847 1 80
10863 1 20
10869 1 40
10905 1 20
10911 1 10
10918 1 60
10935 1 21
11003 1 4
11005 1 2
11006 1 8
11025 1 10
11031 1 45
11035 1 10
11047 1 25
11070 1 40

sum
===========
828


orderid productid quantity
----------- ----------- --------
11070 2 20
11072 2 8
11075 2 10
11049 2 10
11041 2 30
11030 2 100
11021 2 11
10991 2 50
11077 2 24
10939 2 10
10866 2 21
10885 2 20
10888 2 20
10851 2 5
10852 2 15
10856 2 20
10766 2 40
10741 2 15
10714 2 30
10722 2 3
10787 2 15
10792 2 10
10806 2 20
10813 2 12
10829 2 10
10703 2 5
10641 2 50
10622 2 20
10632 2 30
10611 2 10
10485 2 20
10504 2 12
10418 2 60
10393 2 25
10435 2 10
10440 2 45
10469 2 40
10342 2 24
10335 2 7
10327 2 25
10298 2 40
10255 2 20
10258 2 50
10264 2 35

sum
===========
1057


orderid productid quantity
----------- ----------- --------
10289 3 30
10405 3 50
10485 3 20
10591 3 14
10540 3 60
10702 3 6
10742 3 20
10764 3 20
10857 3 30
10849 3 49
11077 3 4
11017 3 25

sum
===========
328

....

从这个结果可以看出,输出的值是不规则的。而group by输出的值则是规则的,利于开发。

好了,本章主要讲述了:

top n,with ties,聚合函数,group by,compute by这些用于统计的关键字和函数。

你可能感兴趣的:(sql2000学习笔记之select统计数据)