3.7 统计函数

1.       统计函数是以一组值为输入但只输出一个值的函数。SQL自带5个统计函数

2.       avg  min max  sum  count

3.       sum和avg 的输入必须是数值,另外三个则还可以别的类型为输入比如字符串。

3.7.1基本统计

4.       select avg ( salary)
from instructor
where dept name= ’Comp. Sci.’;

5.       这个查询的结果是一个只包含一个属性且只有一个值的关系。数据库可能会给这个关系的属性随意取个什么名字,但我们可以使用as操作来给它取个名字。

6.       进行统计时是否去重可能对结果产生很大影响——求平均时,如果重复值被去掉了,但计数仍按未去重的来计,得到的结果就是错误的。

7.       可以对统计函数中显式地使用distinct来去重,比如count(distinct name) ,能用distinct的地方也能用all,但all是默认值,因此没必要写。

8.       对max和min取distinct没有意义。

3.7.2分组统计

9.       先按条件分好组,再对每个分组分别计算统计

10.   在select子句中出现、不参与统计的属性必须出现在group by 条件中。或者说,没有出现在group by 条件中的属性如果要出现在select子句中必须参与统计。

11.   下面这个SQL语句中,对每个dept_name分组里的元组的ID值可能各不相同,但是这个语句中对一个分组只返回一个ID值,根本没法确定到底要返回哪个ID,所以这个语句是错的,没法执行。

12.   select dept name, ID, avg (salary)
from instructor
group by dept name;

3.7.3Having子句

13.   Where子句是作用于元组的条件,having子句则是作用于分组之上的条件。

14.   可按如下步骤来理解带group by 和having 子句的SQL语句:

a)       先用from子句中获得关系

b)       有where条件的话,执行Where子句进行过滤。

c)       满足where子句的谓词的元组按group by 的条件分组,如果没有group by则满足where子句的谓词的全部元组视为一个分组

d)       有Having子句的话,判断每个分组是否满足having的条件,不满足条件的分组被滤掉

e)       执行select 子句,使用统计函数,一个分组生成一个元组。

3.7.4对null值和bool值进行统计

15.   如果salary中有null, sum(salary)会忽略null值,将不为空的值求和

16.   一般来讲,除了count(*)之外,其它的统计函数都会忽略其输入中的null值。

17.   忽略null值可能导致用于统计的集合为空。空集合的count值为0,其它统计函数的输入为空集合时会返回 null。

18.   从sql:1999起布尔类型可取的值有true false unknown , some every这两个统计函数可作用于布尔值集合。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值