[英]Calculating the intersection of an array with a column in Postgres
我读到运算符“&”,它应该计算两个 arrays 的交集。将 reference_column 转换为数组并使用运算符给我错误“SQL 错误 [42883]:错误:运算符不存在:bigint[] & bigint[]”。 嗯。
如果我想要一个初步结果并使用 && 运算符查看 bigint_array 和 array_agg(reference_column) 之间是否存在任何重叠,它显然有效,但需要数小时并且不能解决我对重叠完整性进行分类的问题。
你有什么提示吗? 有没有一种方法可以在不将其转换为数组的情况下计算数组与列的交集?
我知道缺少 MWG,如有必要,我会在下班后提供一个。 我花了很长时间来创建它们,因为我对 SQL 相当缺乏经验。我希望没有一个很好的提示,但如果需要会更新。 对不起,谢谢。
根据this的回复,引用that one ,您可以通过以下方式使用CROSS JOIN LATERAL
。
在带有reference_column
的表中,您可以添加要对其执行拦截的数组作为新列,并在各行中使用相同的值。
假如说:
bigint_array
是在名为 result1 的结果中作为名为 bigint_array 的列获得的SELECT *
FROM (
SELECT
(SELECT bigint_array FROM result1) AS array1
, reference_column AS ref_array
FROM table2
) AS O
CROSS JOIN LATERAL
(
SELECT COUNT(*) AS n_inter
FROM
(
SELECT UNNEST(array1)
INTERSECT
SELECT UNNEST (array2)
) AS U
) AS I
ORDER BY n_inter DESC
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.