SQLiteHaving 子句

前面我们已经学到了可以用 GROUP BY 子句来对数据进行分组,那么可不可以对分组的数据进一步筛选呢?比如,只想列出 name 计数大于 1 的人名(列出重名的人)

SQLite HAVING 子句可以指定条件来过滤 GROUP BY 分组的结果。

注意 WHERE 子句在所选列上设置条件 而 HAVING 子句则在由 GROUP BY 子句创建的分组上设置条件

HAVING 子句在 SELECT 查询中的位置

SELECT
FROM
WHERE
GROUP BY
HAVING
ORDER BY

语法

在 SELECT 语句中,HAVING 子句必须放在 GROUP BY 子句之后,必须放在 ORDER BY 子句之前。

下面是包含 HAVING 子句的 SELECT 语句的语法:

SELECT column1, column2
FROM table1, table2
WHERE [ conditions ]
GROUP BY column1, column2
HAVING [ conditions ]
ORDER BY column1, column2

范例

假设我们在往 company 里插入数据是重复添加了 James

qlite> SELECT * FROM company;
id          name        age         address     salary
----------  ----------  ----------  ----------  ----------
1           Paul        32          California  20000.0
2           Allen       25          Texas       15000.0
3           Teddy       23          Norway      20000.0
4           Mark        25          Rich-Mond   65000.0
5           David       27          Texas       85000.0
6           Kim         22          South-Hall  45000.0
7           James       24          Houston     10000.0
8           James       24          Houston     10000.0

你可以使用这条语句 INSERT INTO COMPANY VALUES (8, 'James', 24, 'Houston', 10000.00 ); 添加重复的 James

我们使用 HAVING 子句来显示 name 出现了2次及以上的人名

sqlite> SELECT * FROM company GROUP BY name HAVING count(name) >= 2;
id          name        age         address     salary
----------  ----------  ----------  ----------  ----------
8           James       24          Houston     10000.0

这将产生以下结果:

ID          NAME        AGE         ADDRESS     SALARY
----------  ----------  ----------  ----------  ----------
2           Allen       25          Texas       15000
5           David       27          Texas       85000
6           Kim         22          South-Hall  45000
4           Mark        25          Rich-Mond   65000
3           Teddy       23          Norway      20000

如果只显示 name 没有重复,的可以使用下面的 HAVING 子句

id          name        age         address     salary
----------  ----------  ----------  ----------  ----------
2           Allen       25          Texas       15000.0
5           David       27          Texas       85000.0
6           Kim         22          South-Hall  45000.0
4           Mark        25          Rich-Mond   65000.0
1           Paul        32          California  20000.0
3           Teddy       23          Norway      20000.0

SQLite 基础教程

关于   |   FAQ   |   我们的愿景   |   广告投放   |  博客

  简单教程,简单编程 - IT 入门首选站

Copyright © 2013-2022 简单教程 twle.cn All Rights Reserved.