PostgreSQL 分组依据


PostgreSQL 分组依据

在本节中,我们将了解PostgreSQL中GROUP BY子句的工作。我们还看到了 GROUP BY 子句如何与SUM() 函数、COUNT()、JOIN 子句、多列以及没有聚合函数一起使用的示例。

PostgreSQL 的 GROUP BY 条件与 SELECT 命令一起使用,也可以用来减少结果中的冗余。

PostgreSQL GROUP BY 子句

最重要的是,此子句用于将行拆分为多个组,其中 GROUP BY 条件收集多条记录中的数据,并按一列或多列设置结果。

并且每个组都可以应用一个聚合函数,如COUNT() 函数用于获取组中的项目数,SUM() 函数用于分析项目的总和。

PostgreSQL group by 子句的语法

GROUP BY 子句的基本语法如下:

SELECT column-list    
FROM table_name    
WHERE [conditions ]    
GROUP BY column1, column2....columnN    
ORDER BY column1, column2....columnN

以下是上述语法中使用的参数:

Columns-list:用于选择需要分组的列,可以是column1, column2,...columnN

我们还可以将 SELECT 命令的附加条件与 GROUP BY 子句一起使用。

在PostgreSQL 中],GROUP BY 子句的作用如下:

PostgreSQL 分组依据

PostgreSQL GROUP BY 子句示例

为了更好地理解,我们将采用Employee表,该表是我们在 PostgreSQL 教程的前面部分中创建的。

PostgreSQL 分组依据

  • 不使用聚合函数的 GROUP BY 子句示例在这里,我们将使用GROUP BY子句而不应用聚合函数。所以,我们使用下面的命令,它从*员工*表中获取记录,并通过emp_id**对结果进行分组。
SELECT emp_id  
FROM employee  
GROUP BY emp_id;

输出

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

PostgreSQL 分组依据

在上面的例子中,GROUP BY子句的工作方式与DISTINCT条件类似,它帮助我们从结果集中删除匹配的行。

  • 使用 PostgreSQL GROUP BY Clasue 的 SUM() 函数示例

在这里,我们使用带有GROUP BY条件的聚合函数。

例如,如果我们想要得到的总和工资,其FIRST_NAME约翰员工\表。因此,我们使用where子句和 GROUP BY 子句来获取 John 的工资。

以下命令用于在GROUP BY条件的帮助下获取John 的工资总和:

SELECT first_name, SUM(SALARY)     
FROM employee  
where first_name = 'John'  
GROUP BY first_name ;

输出

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

PostgreSQL 分组依据

注意:在employee表中,我们有first_name的冗余为john。使用此命令后,由于我们使用了 where 子句,所以合并了两个 john 的工资,并显示了 john 工资的总和。

在下面的命令中,我们使用ORDER BY条件通过GROUP BY子句按升序显示所有员工的工资:

SELECT first_name, SUM(SALARY)     
FROM employee  
GROUP BY first_name  
ORDER BY SUM (salary) asc;

输出

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

PostgreSQL 分组依据

  • 使用 PostgreSQL GROUP BY 子句的 JOIN 条件示例

在下面的示例中,我们使用GROUP BY子句和INNER JOIN子句来获取每个员工的工资总和。

在以下命令中,我们将员工表与员工详细信息\表连接起来,并按员工姓名连接(组合)员工。

SELECT first_name || ' ' || last_name as full_name,  
SUM (salary) salary  
FROM employee  
INNER JOIN employee_details USING (emp_id)        
GROUP BY full_name  
ORDER BY salary;

输出

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

PostgreSQL 分组依据

  • 使用 PostgreSQL GROUP BY 子句的 Count() 函数示例

在下面的示例中,我们使用COUNT()函数来获取emp_id的数量。因此,我们选择first_name并从员工\表中获取emp_id的计数。

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

输出

执行上述命令后,我们将得到以下结果,我们可以看到,在first_name列中,John的计数为2

PostgreSQL 分组依据

对于每个组,它使用COUNT() 函数返回行数。GROUP BY 子句将employee 中的行分组,并按emp_id列中的值对它们进行分组。

  • 使用 PostgreSQL GROUP BY 子句的多列示例

在这种情况下,我们将在GROUP BY子句的帮助下取一列或多列并获取记录。

在下面的示例中,我们采用的多列是emp_id 和 first_name使用 GROUP BY 子句,该子句将*员工*****表中*的行通过它们的值\分开emp_id 和 first_name

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

**输出**

执行上述命令后,我们将得到以下结果:PostgreSQL 分组依据****