PostgreSQL - “DISTINCT ON”和“GROUP BY”语法

作者:编程家 分类: postgresql 时间:2025-06-26

PostgreSQL - “DISTINCT ON”和“GROUP BY”语法

在 PostgreSQL 数据库中,我们经常需要对数据进行去重或者按照某个列进行分组计算。为了实现这些操作,PostgreSQL 提供了两种常用的语法,即“DISTINCT ON”和“GROUP BY”。

DISTINCT ON

“DISTINCT ON”语法用于返回一组唯一的记录,这些记录是基于指定的列进行去重的。与常规的“DISTINCT”操作不同,它可以指定多个列,并且会返回每个组中的第一条记录。

下面是一个使用“DISTINCT ON”语法的简单示例:

sql

SELECT DISTINCT ON (column1) column1, column2, column3

FROM table_name

ORDER BY column1, column2;

在上述示例中,我们通过指定“column1”来进行去重操作,并且返回每个组中的第一条记录。

GROUP BY

“GROUP BY”语法用于对查询结果进行分组,并可以对每个组进行聚合计算。与“DISTINCT ON”不同,它可以对多个列进行分组,并且可以使用聚合函数对每个组进行计算。

下面是一个使用“GROUP BY”语法的简单示例:

sql

SELECT column1, column2, SUM(column3)

FROM table_name

GROUP BY column1, column2;

在上述示例中,我们通过指定“column1”和“column2”来进行分组操作,并且计算每个组中“column3”的总和。

使用案例

假设我们有一个名为“orders”的表,其中包含订单的信息,包括订单号、客户ID和订单金额。我们想要找出每个客户的第一笔订单,并计算他们的总订单金额。

sql

SELECT DISTINCT ON (customer_id) customer_id, order_id, order_amount

FROM orders

ORDER BY customer_id, order_id;

上述查询将返回每个客户的第一笔订单,以及相应的订单金额。

sql

SELECT customer_id, SUM(order_amount)

FROM orders

GROUP BY customer_id;

上述查询将返回每个客户的总订单金额。

在 PostgreSQL 中,使用“DISTINCT ON”可以对指定的列进行去重,并返回每个组中的第一条记录;而使用“GROUP BY”可以对指定的列进行分组,并进行聚合计算。根据具体需求,我们可以选择适合的语法来处理数据。