扫码一下
查看教程更方便
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)