PostgreSQL - “DISTINCT ON”和“GROUP BY”语法
在 PostgreSQL 数据库中,我们经常需要对数据进行去重或者按照某个列进行分组计算。为了实现这些操作,PostgreSQL 提供了两种常用的语法,即“DISTINCT ON”和“GROUP BY”。DISTINCT ON“DISTINCT ON”语法用于返回一组唯一的记录,这些记录是基于指定的列进行去重的。与常规的“DISTINCT”操作不同,它可以指定多个列,并且会返回每个组中的第一条记录。下面是一个使用“DISTINCT ON”语法的简单示例:sqlSELECT DISTINCT ON (column1) column1, column2, column3FROM table_nameORDER BY column1, column2;在上述示例中,我们通过指定“column1”来进行去重操作,并且返回每个组中的第一条记录。GROUP BY“GROUP BY”语法用于对查询结果进行分组,并可以对每个组进行聚合计算。与“DISTINCT ON”不同,它可以对多个列进行分组,并且可以使用聚合函数对每个组进行计算。下面是一个使用“GROUP BY”语法的简单示例:
sqlSELECT column1, column2, SUM(column3)FROM table_nameGROUP BY column1, column2;在上述示例中,我们通过指定“column1”和“column2”来进行分组操作,并且计算每个组中“column3”的总和。使用案例假设我们有一个名为“orders”的表,其中包含订单的信息,包括订单号、客户ID和订单金额。我们想要找出每个客户的第一笔订单,并计算他们的总订单金额。
sqlSELECT DISTINCT ON (customer_id) customer_id, order_id, order_amountFROM ordersORDER BY customer_id, order_id;上述查询将返回每个客户的第一笔订单,以及相应的订单金额。
sqlSELECT customer_id, SUM(order_amount)FROM ordersGROUP BY customer_id;上述查询将返回每个客户的总订单金额。在 PostgreSQL 中,使用“DISTINCT ON”可以对指定的列进行去重,并返回每个组中的第一条记录;而使用“GROUP BY”可以对指定的列进行分组,并进行聚合计算。根据具体需求,我们可以选择适合的语法来处理数据。