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来取一个别名,以增加可读性.

常见统计函数

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

Function Description
COUNT(*)COUNT(column) 计数!COUNT(*) 统计数据行数,COUNT(column) 统计column非NULL的行数.
MIN(column) 找column最小的一行.
MAX(column) 找column最大的一行.
AVG(column) 对column所有行取平均值.
SUM(column) 对column所有行求和.
Docs: MySQL, Postgres, SQLite, Microsoft 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

Role Name Building Years_employed
Engineer Becky A. 1e 4
Engineer Dan B. 1e 2
Engineer Sharon F. 1e 6
Engineer Dan M. 1e 4
Engineer Malcom S. 1e 1
Artist Tylar S. 2w 2
Artist Sherman D. 2w 8
Artist Jakob J. 2w 6
Artist Lillia A. 2w 7
Artist Brandon J. 2w 7
Manager Scott K. 1e 9
Manager Shirlee M. 1e 3
Manager Daria O. 2w 6
Engineer Yancy I. null 0
Artist Oliver P. null 0

练习 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
 

你可能感兴趣的:(SQL Lesson 7: 在查询中进行统计I (Pt. 1))