目錄
- 參考源
- SQL having 子句
- 示例資料
- 基本使用
參考源
- 簡單教程
- https://www.twle.cn/l/yufei/sql/sql-basic-having.html
- 菜鳥教程
- https://www.runoob.com/sql/sql-having.html
SQL having 子句
SQL 中的
having
子句用于篩選分組 ( GROUP BY ) 後的各組資料。
可以看出:
where
做了第一層篩選,
having
做第二層篩選
注意:
having
子句一般跟在
group by
子句後面
示例資料
CREATE DATABASE IF NOT EXISTS hardy_db DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci;
USE hardy_db;
DROP TABLE IF EXISTS lesson;
CREATE TABLE lesson_views (
id INT ( 11 ) NOT NULL PRIMARY KEY AUTO_INCREMENT,
name VARCHAR ( 32 ) DEFAULT '',
lession_id int(11) NOT NULL default 0,
views INT ( 11 ) NOT NULL DEFAULT 0,
created_at TIMESTAMP
);
INSERT INTO lesson_views ( id, name, views,lesson_id, created_at )
VALUES
( 1, 'Python3 基礎教程', 981, 1, '2019-03-18 13:52:03' ),
( 2, 'JavaScript 基礎教程', 73, 2, '2019-03-18 16:03:32' ),
( 3, 'Ruby 基礎教程', 199, 3, '2019-04-01 06:16:14' ),
( 4, 'SQL 基礎教程', 533, 1, '2019-05-02 08:13:42' ),
( 5, 'Linux 基礎教程', 1000, 2, '2019-06-02 08:13:42' ),
( 6, 'Python3 基礎教程', 981, 3, '2019-03-18 13:52:03' ),
( 7, 'JavaScript 基礎教程', 73, 1, '2019-03-18 16:03:32' ),
( 8, 'Ruby 基礎教程', 199, 2, '2019-04-01 06:16:14' ),
( 9, 'SQL 基礎教程', 533, 3, '2019-05-02 08:13:42' ),
( 10, 'Linux 基礎教程', 1000, 1, '2019-06-02 08:13:42' );
基本使用
- 使用
group by
語句統計下所有課程的通路量
輸出結果如下
mysql> select name, sum(views) from lesson_views group by name; +---------------------+------------+ | name | sum(views) | +---------------------+------------+ | Python3 基礎教程 | 1962 | | JavaScript 基礎教程 | 146 | | Ruby 基礎教程 | 398 | | SQL 基礎教程 | 1066 | | Linux 基礎教程 | 2000 | +---------------------+------------+ 5 rows in set (0.00 sec)
-
現在需要選擇總通路量高于 100 課程,那麼可以使用下面的 SQL 語句
運作結果輸出如下
mysql> select name, sum(views) as total_views from lesson_views group by name ha ving total_views > 100; +---------------------+-------------+ | name | total_views | +---------------------+-------------+ | Python3 基礎教程 | 1962 | | JavaScript 基礎教程 | 146 | | Ruby 基礎教程 | 398 | | SQL 基礎教程 | 1066 | | Linux 基礎教程 | 2000 | +---------------------+-------------+ 5 rows in set (0.00 sec)