DISTINCT 包含两个 array_agg (或一个包含元组的 array_agg)

sqlserver

1个回答

写回答

Morgana1

2025-06-18 07:25

+ 关注

手机
手机

使用DISTINCT关键字可以对查询结果进行去重操作。在SQL中,DISTINCT关键字可以应用在单个列上,也可以应用在多个列上。当应用在多个列上时,DISTINCT会根据多个列的组合进行去重。

在某些情况下,我们可能需要使用DISTINCT来去重的同时,还需要对其他列进行聚合操作。这时可以使用array_agg函数来将多个重复的值聚合到一个数组中。array_agg函数接受一个参数,该参数可以是一个列名或一个表达式,它将多个值聚合到一个数组中。

下面我们通过一个例子来说明如何使用DISTINCT和array_agg函数。

假设我们有一个员工表,包含员工的姓名和所属部门。我们希望查询每个部门下的员工姓名,并将结果以数组的形式返回。

首先,我们需要创建一个示例表,并插入一些数据。以下是创建表和插入数据的SQL代码:

sql

CREATE TABLE employees (

id SERIAL PRIMARY KEY,

name VARCHAR(100),

department VARCHAR(100)

);

INSERT INTO employees (name, department)

VALUES

('张三', '销售部'),

('李四', '销售部'),

('王五', '财务部'),

('赵六', '人力资源部'),

('钱七', '人力资源部');

现在我们可以开始查询每个部门下的员工姓名,并将结果以数组的形式返回。以下是查询的SQL代码:

sql

SELECT department, array_agg(DISTINCT name) AS employees

FROM employees

GROUP BY department;

上述查询语句中,我们使用了DISTINCT关键字来去重员工姓名,然后使用array_agg函数将去重后的姓名聚合到一个数组中。最后,我们使用GROUP BY子句按部门进行分组。

运行上述查询,我们将得到以下结果:

department | employees

---------------+-----------------------

销售部 | {李四,张三}

人力资源部 | {赵六,钱七}

财务部 | {王五}

可以看到,查询结果中每个部门下的员工姓名已经以数组的形式返回,并且去重了重复的姓名。

使用DISTINCT和array_agg函数进行多列的去重和聚合

除了在单个列上使用DISTINCT和array_agg函数外,我们还可以在多个列上同时使用这两个函数。这样可以根据多个列的组合进行去重和聚合。

假设我们有一个订单表,包含订单号、客户姓名和产品名称。我们希望查询每个客户订购的产品,并将结果以元组的形式返回。

以下是创建表和插入数据的SQL代码:

sql

CREATE TABLE orders (

order_id SERIAL PRIMARY KEY,

customer_name VARCHAR(100),

product_name VARCHAR(100)

);

INSERT INTO orders (customer_name, product_name)

VALUES

('张三', '手机'),

('李四', '电视'),

('张三', '电脑'),

('王五', '手机'),

('王五', '电脑');

现在我们可以开始查询每个客户订购的产品,并将结果以元组的形式返回。以下是查询的SQL代码:

sql

SELECT customer_name, array_agg(DISTINCT (customer_name, product_name)) AS orders

FROM orders

GROUP BY customer_name;

上述查询语句中,我们在array_agg函数中使用了一个元组 (customer_name, product_name)。这样就可以根据客户姓名和产品名称的组合进行去重和聚合。最后,我们使用GROUP BY子句按客户姓名进行分组。

运行上述查询,我们将得到以下结果:

customer_name | orders

---------------+--------------------

张三 | {(张三,手机),(张三,电脑)}

李四 | {(李四,电视)}

王五 | {(王五,手机),(王五,电脑)}

可以看到,查询结果中每个客户订购的产品已经以元组的形式返回,并且根据客户姓名和产品名称的组合进行了去重和聚合。

通过上述例子,我们了解了如何在SQL查询中使用DISTINCT和array_agg函数进行去重和聚合操作。无论是单个列的去重还是多个列的去重和聚合,都可以通过这两个函数来实现。这在处理复杂的数据查询时非常有用。

举报有用(4分享收藏

Copyright © 2025 IZhiDa.com All Rights Reserved.

知答 版权所有 粤ICP备2023042255号