目录
- 参考源
- 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)