SQL Lesson 7: 在查询中进行统计I (Pt. 1)

 

从这一节开始学习SQL如何对数据进行统计,SQL默认支持一组统计表达式,他们可以完成数据统计,如:计数,求平均等。 以Movies表数据为例,这些统计表达式可以帮我们回答以下问题:"Pixar公司生产了多少电影?", 或 "每一年的票房冠军是谁?".

对全部结果数据做统计

SELECT AGG_FUNC(column_or_expression) AS aggregate_description, … FROM mytable 
WHERE constraint_expression;

如果不指明如何分组,那统计函数将对查询结果全部数据进行统计,当然每一个统计也可以像之前用AS来取一个别名,以增加可读性.

常见统计函数

下面介绍几个常用统计函数:

FunctionDescription
COUNT(*)COUNT(column)计数!COUNT(*) 统计数据行数,COUNT(column) 统计column非NULL的行数.
MIN(column)找column最小的一行.
MAX(column)找column最大的一行.
AVG(column)对column所有行取平均值.
SUM(column)对column所有行求和.
Docs: MySQLPostgresSQLiteMicrosoft SQL Server

分组统计

GROUP BY 数据分组语法可以按某个col_name对数据进行分组,如:GROUP BY Year指对数据按年份分组, 相同年份的分到一个组里。如果把统计函数和GROUP BY结合,那统计结果就是对分组内的数据统计了.
GROUP BY 分组结果的数据条数,就是分组数量,比如:GROUP BY Year,全部数据里有几年,就返回几条数据, 不管是否应用了统计函数.

用分组的方式统计

SELECT AGG_FUNC(column_or_expression) AS aggregate_description, … FROM mytable WHERE constraint_expression GROUP BY column;

练习

这节练习基于 Employees 表. 我们来统计有多少雇员, 以及计算一下团队相关的一些指标数据. 马上开始吧!.

Table(表): Employees

RoleNameBuildingYears_employed
EngineerBecky A.1e4
EngineerDan B.1e2
EngineerSharon F.1e6
EngineerDan M.1e4
EngineerMalcom S.1e1
ArtistTylar S.2w2
ArtistSherman D.2w8
ArtistJakob J.2w6
ArtistLillia A.2w7
ArtistBrandon J.2w7
ManagerScott K.1e9
ManagerShirlee M.1e3
ManagerDaria O.2w6
EngineerYancy I.null0
ArtistOliver P.null0

练习 do it — 请完成如下任务

1.找出就职年份最高的雇员(列出雇员名字+年份)

SELECT Name,max(Years_employed) FROM employees

2.按角色(Role)统计一下每个角色的平均就职年份

SELECT Role,avg(Years_employed) FROM employees
group by Role

3.按办公室名字总计一下就职年份总和

select Building,sum(Years_employed) from Employees
group by Building

4.每栋办公室按人数排名,不要统计无办公室的雇员

select Building,count(Building) from Employees
where Building is not null
group by Building

5.就职1,3,5,7年的人分别占总人数的百分比率是多少(给出年份和比率"50%" 记为 50)

select Years_employed,count(*)*100/(select count(*)from employees)as Rating
from Employees
where Years_employed in (1,3,5,7)
group by Years_employed
 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值