第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

SQL Group By & Having

1. 定義

慕課解釋: Group By 用于數(shù)據(jù)分組,一般與聚合函數(shù)一起使用,對分組后的數(shù)據(jù)進(jìn)行聚合操作。由于 Where 無法與聚合函數(shù)一起搭配使用,因此 SQL 增加Having 指令。

2. 前言

本小節(jié),我們將一起學(xué)習(xí)Group ByHaving。

SQL 不僅提供數(shù)據(jù)操作功能相關(guān)的指令,而且也提供了一些指令進(jìn)行數(shù)據(jù)統(tǒng)計和分析。如,Group By 提供了分組功能對數(shù)據(jù)分門別類,Having 可以與聚合函數(shù)搭配用于篩選數(shù)據(jù)。

本小節(jié)測試數(shù)據(jù)如下,請先在數(shù)據(jù)庫中執(zhí)行:

DROP TABLE IF EXISTS imooc_user;
CREATE TABLE imooc_user
(
  id int PRIMARY KEY,
  username varchar(20),
  age int,
  score int
);
INSERT INTO imooc_user(id,username,age,score)
VALUES (1,'peter', 18, 100),(2,'pedro', 24, 500),
(3,'jerry', 24, 500),(4,'mike', 18, 100),(5,'tom', 20, 1000);

提示: 如果你還不熟悉聚合函數(shù),請先閱讀聚合函數(shù)小節(jié)

3. Group By

Group By 會根據(jù) By 后面的數(shù)據(jù)字段來分組,并且根據(jù)給定的聚合函數(shù)來分組進(jìn)行聚合操作。

使用語法如下:

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

其中agg表示聚合函數(shù),table_name表示數(shù)據(jù)表名稱,col表示字段名稱。

3.1 例1 單字段Group By

請書寫 SQL 語句,將imooc_user表中的用戶通過age進(jìn)行分組,并返回每個分組的用戶數(shù)。

分析:

題干中明確指出根據(jù) age 進(jìn)行分組,因此 Group By 應(yīng)該后接 age,統(tǒng)計每個分組的用戶數(shù)使用聚合函數(shù) Count。

語句:

整理可得語句如下:

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

結(jié)果如下:

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

提示: COUNT(*)在數(shù)據(jù)庫層面有專門的優(yōu)化,其性能跟COUNT(1)大致相同。

3.2 例2 多字段 Group By

Group By 不僅支持單字段分組,同時也支持多字段分組。

請書寫 SQL 語句,使用 age 和 score 字段對imooc_user表中的用戶進(jìn)行分組,并返回每個分組的用戶數(shù)。

分析:

題干中明確指出根據(jù) age 和 score 進(jìn)行分組,因此 Group By 應(yīng)該后接 age,score,統(tǒng)計每個分組的用戶數(shù)使用聚合函數(shù) Count。

語句:

整理可得語句如下:

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

結(jié)果如下:

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

4. Having

Having 不能單獨出現(xiàn),須于聚合函數(shù)搭配使用,且常與 Group By 一起出現(xiàn)。Having 本身并無其他含義,它的主要功能是替代 Where。

使用語法如下:

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

其中agg表示聚合函數(shù),table_name表示數(shù)據(jù)表名稱,col表示字段名稱,condition表示過濾條件。

4.1 例3 使用 Having

請書寫 SQL 語句,將imooc_user表中的用戶通過 age 進(jìn)行分組,并返回每個分組的用戶數(shù),且每個分組的用戶數(shù)必須大于1。

分析:

題干中明確指出根據(jù) age 進(jìn)行分組,因此 Group By 應(yīng)該后接 age,統(tǒng)計每個分組的用戶數(shù)使用聚合函數(shù) Count,且使用 Having 過濾。

語句:

整理可得語句如下:

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

結(jié)果如下:

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

5. 小結(jié)

  • Group By 和 Having 常被用于數(shù)據(jù)分析和統(tǒng)計,是可視化和報表的利器。
  • Having 局限于聚合函數(shù),它無法使用在其它場景下。