我有如下数据:
id col1 col2
-----------------
1 [1,2] [2,3]
2 [4,4,6] [6,7]
我想要像这样的数据:
id col3
---------
1 [2]
2 [6]
对此有什么聪明的解决方案吗?
发布于 2018-08-08 20:28:45
您可以使用INTERSECT DISTINCT
-- build example table
WITH example as (
SELECT
* FROM UNNEST([
STRUCT([1,2] as col1, [2,3] as col2),
STRUCT([4,4,6],[6,7])
])
)
-- INTERSECT per row on two arrays
SELECT
ARRAY(SELECT * FROM example.col1
INTERSECT DISTINCT
(SELECT * FROM example.col2)
) AS result
FROM example
发布于 2018-08-08 20:28:32
对不起,我自己解决的:
#standardSQL
CREATE TEMPORARY FUNCTION intersection(x ARRAY<INT64>, y ARRAY<INT64>)
RETURNS INT64
LANGUAGE js AS """
var res = x.filter(value => -1 !== y.indexOf(value));
return res;
;
""";
任何其他更聪明的想法都是受欢迎的!谢谢。
发布于 2018-08-08 21:34:46
另一种选择
#standardSQL
WITH `project.dataset.your_table` AS (
SELECT 1 id, [1,2,3] col1, [2,3] col2, [2,3,7] col3 UNION ALL
SELECT 1, [4,4,6], [6,7], [5,6]
)
SELECT
id,
ARRAY(
SELECT DISTINCT a
FROM t.col1 a, t.col2 b, t.col3 c
WHERE a = b AND b = c
) AS result
FROM `project.dataset.your_table` t
上面可以更紧凑,特别是当您有两个以上的列要处理时
https://stackoverflow.com/questions/51746070
复制相似问题