PostgreSQL HAVING 子句

Posted 瀚高PG实验室

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PostgreSQL HAVING 子句相关的知识,希望对你有一定的参考价值。

HAVING 子句

HAVING 子句可以让我们筛选分组后的各组数据。
WHERE 子句在所选列上设置条件,而 HAVING 子句则在由 GROUP BY 子句创建的分组上设置条件。

语法

下面是 HAVING 子句在 SELECT 查询中的位置:

SELECT
FROM
WHERE
GROUP BY
HAVING
ORDER BY

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

实例

创建 testable 表,数据内容如下:

hgdb# select * from testable;
 id | name  | age | address    | salary
----+-------+-----+------------+--------
  1 | 张三  |  32 | 济南      |  20000
  2 | 李四  |  25 | 青岛      |  15000
  3 | 王五  |  23 | 北京      |  20000
  4 | 赵六  |  25 | 上海      |  65000
  5 | 小明  |  27 | 广州      |  85000
  6 | 小红  |  22 | 深圳      |  45000
  7 | 小强  |  24 | 成都      |  10000
(7 rows)

下面实例将找出根据 NAME 字段值进行分组,并且 name(名称) 字段的计数少于 2 数据:

SELECT NAME FROM testable GROUP BY name HAVING count(name) < 2;

得到以下结果:

name
 -------
  张三
  李四
  王五
  赵六
  小明
  小红
  小强
(7 rows)

我们往表里添加几条数据:

INSERT INTO testable VALUES (8, '小强', 24, '成都', 20000.00);
INSERT INTO testable VALUES (9, '小红', 44, '深圳', 5000.00);
INSERT INTO testable VALUES (深圳);

此时,testable 表的记录如下:

id | name  | age | address      | salary
 ----+-------+-----+--------------+--------
   1 | 张三  |  32 | 济南         |  20000
   2 | 李四  |  25 | 青岛         |  15000
   3 | 王五  |  23 | 北京         |  20000
   4 | 赵六  |  25 | 上海         |  65000
   5 | 小明  |  27 | 广州         |  85000
   6 | 小红  |  22 | 深圳         |  45000
   7 | 小强  |  24 | 成都         |  10000
   8 | 小强  |  24 | 成都         |  20000
   9 | 小红  |  44 | 深圳         |   5000
  10 | 小红  |  45 | 深圳         |   5000
(10 rows)

下面实例将找出根据 name 字段值进行分组,并且名称的计数大于 1 数据:

hgdb-# SELECT NAME FROM testable GROUP BY name HAVING count(name) > 1;

得到结果如下:

name
-------
 小红
 小强
(2 rows)

以上是关于PostgreSQL HAVING 子句的主要内容,如果未能解决你的问题,请参考以下文章

HAVING 子句中的多个聚合函数

在oracle中where 子句和having子句中的区别

使用Having子句

SQL HAVING 子句

在oracle中where 子句和having子句中的区别

大数据ClickHouse进阶(十四):ClickHouse的HAVING和ORDER BY子句