谷歌biquery sql中列表的组合



我需要在表的一列中找到所有可能的唯一值组合。例如,对于列值1,2,3,4,5。我希望结果是[1,2],[1,3],[1,4],[1,5],但不希望包括[2,1],[3,1]等。由于[1,2]&[2,1]是相似/相同的

将感谢任何指针来构造查询以查找值的组合。

感谢

您可以使用join:

select t1.col, t2.col
from t t1 join
t t2
on t1.col < t2.col;

如果列中可能存在重复值,请使用select distinct:

select distinct t1.col, t2.col
from t t1 join
t t2
on t1.col < t2.col;

我将使用以下代码在BQ中生成它:

WITH table1 AS (
SELECT 
*
FROM
UNNEST(GENERATE_ARRAY(1 , 5, 1)) AS list)
, table2 AS (
SELECT 
*
FROM
UNNEST(GENERATE_ARRAY(1 , 5, 1)) AS list)
SELECT DISTINCT
table1.list number1,
table2.list number2
FROM 
table1
JOIN table2
ON table2.list <= table1.list
ORDER BY
number1, number2

这个概念与Gordon Linoff提出的概念几乎相同,唯一的区别是<=运算符而不是<。如果我们仅基于<运算符,我们不会得到所有的组合。

避免自加入的另一种方法

select distinct value, value2
from (
select *, array_agg(value) over(order by value rows between 1 following and unbounded following) values
from data   
), unnest(values) value2

最新更新