教程 > postgresql 教程 > 阅读:30

postgresql having 子句——迹忆客-ag捕鱼王app官网

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

示例

创建 ,数据内容如下:

jiyik_db = # select * from company;
 id | name  | age | address   | salary
---- ------- ----- ----------- --------
  1 | paul  |  32 | california|  20000
  2 | allen |  25 | texas     |  15000
  3 | teddy |  23 | norway    |  20000
  4 | mark  |  25 | rich-mond |  65000
  5 | david |  27 | texas     |  85000
  6 | kim   |  22 | south-hall|  45000
  7 | james |  24 | houston   |  10000
(7 rows)

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

jiyik_db - #select name from company group by name having count(name) < 2;

结果如下:

  name
 -------
  teddy
  paul
  mark
  david
  allen
  kim
  james
(7 rows)

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

insert into company values (8, 'paul', 24, 'houston', 20000.00);
insert into company values (9, 'james', 44, 'norway', 5000.00);
insert into company values (10, 'james', 45, 'texas', 5000.00);

此时,company 表的记录如下:

 id | name  | age | address      | salary
 ---- ------- ----- -------------- --------
   1 | paul  |  32 | california   |  20000
   2 | allen |  25 | texas        |  15000
   3 | teddy |  23 | norway       |  20000
   4 | mark  |  25 | rich-mond    |  65000
   5 | david |  27 | texas        |  85000
   6 | kim   |  22 | south-hall   |  45000
   7 | james |  24 | houston      |  10000
   8 | paul  |  24 | houston      |  20000
   9 | james |  44 | norway       |   5000
  10 | james |  45 | texas        |   5000
(10 rows)

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

jiyik_db=# select name from company group by name having count(name) > 1;

结果如下:

 name
-------
 paul
 james
(2 rows)

查看笔记

扫码一下
查看教程更方便
网站地图