SQL表列值选择查询列表

时间:2014-12-18 14:37:22

标签: sql arrays postgresql aggregate-functions

所以我有一个包含EMAIL和订单ID的表。

EMAIL   |   id
--------------
Y@a.com |   1
Y@a.com |   2
X@a.com |   3

我需要SELECT它,以便我有一个独特的电子邮件列和一个int的数组的ids列

EMAIL   |   ids
--------------
Y@a.com |   [1,2]
X@a.com |   [3]

我使用PSQL 9.3。我查看了聚合函数,但由于我对SQL atm不太好,所以我并没有真正理解它们。到目前为止我的代码是:

SELECT DISTINCT ON (email) email
FROM order
WHERE date > '2013-01-01';

1 个答案:

答案 0 :(得分:2)

使用聚合函数array_agg()

SELECT email, array_agg(id) AS id_array
FROM   "order"
WHERE  date > '2013-01-01'
GROUP  BY email;

除此之外:您的标识符......

不要将order用作表名,而是reserved word 不要使用date作为列名,它是标准SQL中的保留字和Postgres中的基本类型名称。
我也不会使用id作为列名,这是一种常见的反模式,但“id”不是描述性名称。一旦你加入了几个表,就会有n列名为“id”,你需要开始处理列别名,而不是说它可能造成的混乱。

相反,请使用以下内容:

CREATE TABLE order_data (
   order_data_id serial PRIMARY KEY
 , email         text
 , order_date    date
);
相关问题