Ren*_*ong 2 sql google-bigquery
给定 Google BigQuery 中的两个数组,我需要确定一个数组中的所有元素是否都包含在另一个数组中。
例如,我正在尝试完成以下查询:
WITH
ArrayA AS (
SELECT
[1, 2, 3] arrA,
UNION ALL
SELECT
[4, 5, 6])
ArrayB AS (
SELECT
[1, 2, 3, 4, 5] arrB)
SELECT
*
FROM
ArrayA
CROSS JOIN
ArrayB
WHERE
<your code goes here>
Run Code Online (Sandbox Code Playgroud)
结果看起来像
arrA | arrB
[1,2,3] | [1,2,3,4,5]
Run Code Online (Sandbox Code Playgroud)
,因为 [1,2,3,4,5] 是 [1,2,3] 的超集,但不是 [4,5,6] 的超集。
提前谢谢了。
您可以检查 arrA 中的每个项目,然后获取最少的项目。如果 arrA 的所有项都在 arrB 中,则将有 3 trues,因此最小值为 true。如果其中至少有一个不在 arrB 中,则将有 2true和 1 false,因此最小值为假。
WITH
ArrayA AS (
SELECT [1, 2, 3] arrA,
UNION ALL
SELECT [4, 5, 6]
),
ArrayB AS (
SELECT [1, 2, 3, 4, 5] arrB
)
SELECT
*,
(
SELECT min(a in UNNEST(arrB))
FROM UNNEST(arrA) as a
) as is_a_in_b
FROM ArrayA
CROSS JOIN ArrayB
Run Code Online (Sandbox Code Playgroud)
你也可以让它成为一个函数,并在很多地方使用它。抱歉命名不好:)
CREATE TEMP FUNCTION is_array_in_array(subset ARRAY<int64>, main ARRAY<int64>) AS ((SELECT min(a in UNNEST(main)) FROM UNNEST(subset) as a));
WITH
ArrayA AS (
SELECT [1, 2, 3] arrA,
UNION ALL
SELECT [4, 5, 6]
),
ArrayB AS (
SELECT [1, 2, 3, 4, 5] arrB
)
SELECT
*,
is_array_in_array(arrA, arrB) as is_a_in_b
FROM ArrayA
CROSS JOIN ArrayB
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
509 次 |
| 最近记录: |