PostgreSQL Have 子句


PostgreSQL Have 子句

在本节中,我们将了解PostgreSQL 中HAVING 子句的工作。

have 子句用于指定组或聚合的搜索条件。它经常与 GROUP BY 子句一起使用,以根据详细条件过滤组或聚合。

具有子句的 PostgreSQL 语法

PostgreSQL HAVING 子句的基本语法如下:

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

在上面的语法中,我们使用了以下参数:

参数 描述
GROUP BY 子句 它用于返回按 column1 分组的行。
Having clause 它用于定义过滤集合的条件。

注意:在 PostgreSQL 中,我们可以添加 SELECT 命令的其他子句,例如 LIMIT、JOIN 和 FETCH。随后,HAVING 子句在 SELECT 子句之前工作。

在PostgreSQL 中, HAVING 子句以以下格式工作:

PostgreSQL Have 子句

我们不能在HAVING 子句中使用列别名,因为在评估 HAVING 子句时,无法访问在SELECT子句中定义的列别名。

have 和 where 子句的区别

让我们看看HAVING 子句和 WHERE 子句之间的区别:

Having clause Where clause
HAVING 子句允许我们根据定义的条件过滤行组。 WHERE 子句允许我们根据定义的条件过滤行。
HAVING 子句对行组很有用。 WHERE 子句仅适用于行。

PostgreSQL HAVING 子句示例

让我们看一些在 PostgreSQL 中包含子句的例子。因此,这里我们将采用我们在 PostgreSQL 教程的早期主题中创建的员工表。

PostgreSQL Have 子句

使用 PostgreSQL HAVING 子句的 SUM() 函数示例

在下面的示例中,我们使用 GROUP BY 子句和 SUM() 函数来确定每个员工的总工资:

SELECT emp_id, SUM (salary)  
FROM employee  
GROUP BY emp_id;

输出

在下面的示例中,我们使用GROUP BY子句SUM()函数来确定每个员工的总工资:

  1. SELECT emp_id, SUM(工资)
  2. 来自员工
  3. GROUP BY emp_id;

输出

执行上述命令后,我们将得到以下输出,其中显示了基于每个员工的emp_id的工资总和。

PostgreSQL Have 子句

之后,我们将在上述命令中添加 HAVING 子句,用于选择工资超过 25000 的员工:

SELECT emp_id, first_name, SUM (salary)  
FROM employee  
GROUP BY first_name, emp_id  
HAVING SUM (salary) > 25000  
order by first_name DESC;

输出

执行上述命令后,我们将得到以下结果,其中显示了工资超过 25000 的员工:

PostgreSQL Have 子句

使用 PostgreSQL HAVING 子句的 COUNT() 函数示例

以下命令用于在 GROUP BY 子句的帮助下识别员工人数:

SELECT first_name, COUNT (emp_id)  
FROM employee  
GROUP BY first_name;

输出

一旦我们执行了上面的命令,我们将得到下面的输出;显示员工人数:

PostgreSQL Have 子句

之后,我们将在上面的命令中添加 HAVING 子句来选择少于两个员工的first_name

SELECT first_name, COUNT (emp_id)  
FROM employee  
GROUP BY first_name  
HAVING COUNT (emp_id)< 2;

输出

执行上述命令后,我们将得到以下结果:

PostgreSQL Have 子句