您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

SQL Group By & Having

1. 定义

编程之家解释: Group By 用于数据分组,一般与聚合一起使用,对分组后的数据进行聚合操作。由于 Where 无法与聚合一起搭配使用,因此 Having 指令。

2. 前言

本小节,我们将一起学习Group ByHaving

不仅提供数据操作相关的指令,而且也提供了一些指令进行数据和分析。如,Group By 提供了分组对数据分门别类,Having 可以与聚合搭配用于筛选数据。

本小节测试数据如下,请先在中执行:

DROP TABLE IF EXISTS imooc_user;CREATE TABLE imooc_user(
  id int PRIMARY KEY,
  username varchar(),
  age int,
   int);INSERT INTO imooc_user(id,username,age,)VALUES (,'peter', , ),(,'pedro', , ),(,'jerry', , ),(,'mike', , ),(,'tom', , );

如果你还不熟悉聚合,请先阅读聚合小节。

3. Group By

Group By 会根据 By 后面的数据字段来分组,并且根据给定的聚合来分组进行聚合操作。

使用语法如下:

SELECT [agg] FROM [table_name] GROUP BY [col];

其中agg表示聚合,table_name表示数据表,col表示字段。

请书写 语句,将imooc_user表中的通过age进行分组,并返回每个分组的数。

分析:

题干中明确指出根据 age 进行分组,因此 Group By 应该后接 age,每个分组的数使用聚合 Count。

语句:

整理可得语句如下:

SELECT age, COUNT(*) FROM imooc_user GROUP BY age;

结果如下:

+-----+----------+
| age | COUNT(*) |
+-----+----------+
| 18  | 2        |
| 24  | 2        |
| 20  | 1        |
+-----+----------+

COUNT(*)在层面有专门的优化,其跟COUNT(1)大致相同。

Group By 不仅单字段分组,同时也多字段分组。

请书写 语句,使用 age 和 字段对imooc_user表中的进行分组,并返回每个分组的数。

分析:

题干中明确指出根据 age 和 进行分组,因此 Group By 应该后接  age,,每个分组的数使用聚合 Count。

语句:

整理可得语句如下:

SELECT age, , COUNT(*) FROM imooc_user GROUP BY age, ;

结果如下:

+-----+-------+----------+
| age |  | COUNT(*) |
+-----+-------+----------+
| 18  | 100   | 2        |
| 24  | 500   | 2        |
| 20  | 1000  | 1        |
+-----+-------+----------+

4. Having

Having 不能单独出现,须于聚合搭配使用,且常与 Group By 一起出现。Having 本身并无其他含义,它的主要是替代 Where。

使用语法如下:

SELECT [agg] FROM [table_name] GROUP BY [col] HAVING [condition];

其中agg表示聚合,table_name表示数据表,col表示字段,condition表示过滤条件。

请书写 语句,将imooc_user表中的通过 age 进行分组,并返回每个分组的数,且每个分组的数必须大于1

分析:

题干中明确指出根据 age 进行分组,因此 Group By 应该后接 age,每个分组的数使用聚合 Count,且使用 Having 过滤。

语句:

整理可得语句如下:

SELECT age, COUNT(*) FROM imooc_user GROUP BY age HAVING COUNT(*) > ;

结果如下:

+-----+----------+
| age | COUNT(*) |
+-----+----------+
| 18  | 2        |
| 24  | 2        |
+-----+----------+

5. 小结

Group By 和 Having 常被用于数据分析和,是可视化和报表的利器。

Having 局限于聚合,它无法使用在其它场景下。


联系我
置顶