代码之家  ›  专栏  ›  技术社区  ›  Greg

从输入数组中查找包含最多项的数组

  •  1
  • Greg  · 技术社区  · 7 年前

    我有两个表格如下:

    Table 1:
    [1,2,3,4,5]
    
    Table 2:
    [2,3,4]
    [1,4]
    [9,5,7]
    

    我的目标是从表2中找到包含表1中最多元素的数组。在本例中,预期结果为表2中的记录[2,3,4]。

    到目前为止,我有以下几点,但我正在努力将max elements逻辑结合起来:

    #standardSQL
    WITH query_items AS (
      SELECT [96072688,25185958] AS items
    ),
    lookup_values AS (
      SELECT antecedent from recommendation_engine.association_rules
    )
    SELECT query_items.items, lookup_values.antecedent
    FROM query_items, lookup_values, UNNEST([(SELECT ARRAY_LENGTH(query_items.items) - COUNT(1) 
                          FROM UNNEST(query_items.items) AS input 
                          JOIN UNNEST(lookup_values.antecedent)  AS output 
                          ON input = output)]) AS results
    WHERE results = 0
    

    提前感谢您提供的任何帮助!

    1 回复  |  直到 7 年前
        1
  •  3
  •   Mikhail Berlyant    7 年前

    下面的例子(对于BigQuery标准SQL)应该给您一个想法

    #standardSQL
    WITH `project.dataset.table1` AS (
      SELECT [1,2,3,4,5] target
    ), `project.dataset.table2` AS (
      SELECT [2,3,4] candidates UNION ALL
      SELECT [1,4] UNION ALL
      SELECT [9,5,7] 
    )
    SELECT *, 
      (SELECT COUNT(1) 
        FROM t1.target x 
        JOIN t2.candidates y 
        ON x=y
      ) matches
    FROM `project.dataset.table1` t1
    CROSS JOIN `project.dataset.table2` t2
    ORDER BY matches DESC
    LIMIT 1  
    

    #   target      candidates  matches
    1   [1,2,3,4,5] [2,3,4]     3