【问题标题】:Combinations of a list in google biquery-sqlgoogle bigquery-sql 中列表的组合
【发布时间】:2021-09-27 22:26:18
【问题描述】:

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

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

谢谢

【问题讨论】:

  • 您是指需要 2 的组合而不需要列表中元素的排列吗?

标签: sql google-bigquery


【解决方案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;

【讨论】:

    【解决方案2】:

    我会使用以下代码在 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 提出的概念几乎相同,唯一的区别是

    【讨论】:

      【解决方案3】:

      另一种避免自连接的方法

      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
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-08-15
        • 1970-01-01
        • 2015-04-26
        • 2019-07-28
        • 1970-01-01
        • 2014-10-05
        相关资源
        最近更新 更多