SQL——7、在查询中进行统计

在查询中进行统计I (Pt. 1)

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

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;

 

在查询中进行统计II (Pt. 2)

HAVING进行筛选

SELECT group_by_column, AGG_FUNC(column_expression) AS aggregate_result_alias, …

FROM mytable

WHERE condition

GROUP BY column

HAVING group_condition;

语法 HAVING 语法将用来解决这个问题,他可以对分组之后的数据再做SELECT筛选.

 

练习:Table(表): Employees

【难题】按角色分组算出每个角色按有办公室和没办公室的统计人数(列出角色,数量,有无办公室,注意一个角色如果部分有办公室,部分没有需分开统计) ?

SELECT  role,count(role),building is not null as bd

FROM  employees

GROUP BY  role,bd

 

#按角色和就职年份统计人数,年份按0-3,3-6,6-9这种阶梯分组,最后按角色+阶梯分组排序#

SELECT Role,Years_employed,Years_employed/3 AS year_3,COUNT(Role)

FROM Employees

GROUP BY Role,year_3

posted @ 2022-04-27 10:19  七月安生里  阅读(2208)  评论(0编辑  收藏  举报