Postgresql - 基本数组和 array_agg

标签 postgresql

作为测试,我创建了这个模式:

CREATE TABLE simple_table (client_id int4, order_id int4);
INSERT INTO simple_table (client_id, order_id) 
VALUES 
(1,2),(1,3),(1,4),(1,6),(1,8),(1,12),(1,16),(1,18),(1,25),(1,32),(1,33),(1,37),(1,43),
(1,56),(1,57),(1,66),(2,2),(2,3),(2,5),(2,7),(2,9),(2,12),(2,17),(2,19),(2,22),(2,30),
(2,33),(2,38),(2,44),(2,56),(2,58),(2,66)
;



然后使用 array_agg:

SELECT client_id, array_agg(order_id) FROM simple_table GROUP BY client_id;



为客户端 1 和客户端 2 创建数组:

| CLIENT_ID |                                  ARRAY_AGG |
----------------------------------------------------------
|         1 | 2,3,4,6,8,12,16,18,25,32,33,37,43,56,57,66 |
|         2 | 2,3,5,7,9,12,17,19,22,30,33,38,44,56,58,66 |



现在我想比较 2 行并确定类似的值。从 Postgresql 文档中尝试 && overlap (have elements in common) ARRAY[1,4,3] && ARRAY[2,1] 但我遇到了问题。

也许我看错了。任何帮助或指导将不胜感激!

最佳答案

&& 运算符是一个谓词,它产生一个 truefalse 结果,而不是一个值列表。

如果您要查找同时存在于 client_id=1client_id=2order_id 列表,查询将是:

 select order_id from simple_table  where client_id in (1,2)
  group by order_id having count(*)=2;

这相当于两个数组的交集,如果你认为这些数组是集合(没有重复且值的位置无关紧要),除了你根本不需要使用数组,简单的标准SQL是够好了。

关于Postgresql - 基本数组和 array_agg,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17436632/

相关文章:

database - 是否有比较 T-SQL 和 PL/SQL 的良好引用卡?

ruby-on-rails - Rails 5 范围像多个部分字符串

postgresql - 对等方重置 Gorm 和 Postgres 连接

c++ - 如何使用SOCI库处理减号运算符?

sql - 将两个 count(*) 结果相加

postgresql - 日期范围内的天数

qt - 使用 QSqlDatabase 使用 "cert"身份验证方法连接到 PostgreSQL 服务器

c# - 无法使用 Ole Db 提供程序通过 C# 找到 postgres 数据库

postgresql - Postgres 截断时间戳截断为十秒

codeigniter - 如何在代码点火器中编写连接选择语句