SQL - 使用数组

Posted

技术标签:

【中文标题】SQL - 使用数组【英文标题】:SQL - working with arrays 【发布时间】:2018-08-15 16:29:35 【问题描述】:

我对 SQL 还很陌生,但在工作中必须在 BigQuery 中编写一些查询。我有一个连接不同表的查询并给出以下输出:

我们的目标是找出哪些用户 (account_ids) 曾经是订阅者,并创建一个列来表示是(如果至少有一个“y”)或否(如果都是“n”)。

如何编写一个查询,我可以在其中创建一个新列,其中:对于每个 account_id,如果 is_subsc 中至少有一个“y”,那么它将显示“yes”,如果没有与该 account_id 关联的“y”它会返回“不” 因此,对于上面的表格,它将是:

account_id ------------------------------------------------is_subscriber
1632bfb5-c294-4282-b3fb-a73061dc475a--------no 
ef568b94-e621-4c36-b8da-ede623051da7--------no
6f60e841-9b60-49c9-a36f-70fc00d40f4a---------yes
ec68a446-3a7d-42fc-a79f-a71446b897cd--------yes

我将不胜感激。

【问题讨论】:

【参考方案1】:

这是一种方法:

select account_id,
       (select max(is_sub)
        from unnest(is_subs) is_sub
       ) as ever_sub
from t;

这使用'y' 大于'n' 的观察结果,因此max() 适用于此编码和您的目的。不过,总的来说,我建议将这些标志存储为 真正 布尔值,而不是字符。

【讨论】:

【参考方案2】:

BigQuery 标准 SQL 的另一种选择

#standardSQL
SELECT account_id, 
  ('y' IN UNNEST(is_subs)) is_ever_subscribed
FROM `project.dataset.table`

如果适用于您问题中的虚拟数据,如下所示

#standardSQL
WITH `project.dataset.table` AS (
  SELECT '1632bfb5-c294-4282-b3fb-a73061dc475a' account_id, ['n'] is_subs UNION ALL
  SELECT 'ef568b94-e621-4c36-b8da-ede623051da7', ['n'] UNION ALL
  SELECT '6f60e841-9b60-49c9-a36f-70fc00d40f4a', ['n', 'n', 'y'] UNION ALL
  SELECT 'ec68a446-3a7d-42fc-a79f-a71446b897cd', ['y', 'n'] 
)
SELECT account_id, 
  ('y' IN UNNEST(is_subs)) is_ever_subscribed
FROM `project.dataset.table`

结果将是

Row     account_id                              is_ever_subscribed   
1       1632bfb5-c294-4282-b3fb-a73061dc475a    false    
2       ef568b94-e621-4c36-b8da-ede623051da7    false    
3       6f60e841-9b60-49c9-a36f-70fc00d40f4a    true     
4       ec68a446-3a7d-42fc-a79f-a71446b897cd    true      

如果您的输出 a 必须是 y/ntrue/false 您可以使用以下版本

#standardSQL
SELECT account_id, 
  IF('y' IN UNNEST(is_subs), 'y', 'n') is_ever_subscribed
FROM `project.dataset.table`   

在这种情况下 - 输出将是

Row     account_id                              is_ever_subscribed   
1       1632bfb5-c294-4282-b3fb-a73061dc475a    n    
2       ef568b94-e621-4c36-b8da-ede623051da7    n    
3       6f60e841-9b60-49c9-a36f-70fc00d40f4a    y    
4       ec68a446-3a7d-42fc-a79f-a71446b897cd    y    

【讨论】:

以上是关于SQL - 使用数组的主要内容,如果未能解决你的问题,请参考以下文章

SQL - 使用数组

在案例语句 SQL 中使用数组

Google BigQuery SQL:使用数组?

在新的 BigQuery 标准 SQL 的数组中使用结构

使用 PHP 获取 SQL 数据,然后将数组发送到 Javascript

使用“IN”命令将数组作为要在 SQL 查询中使用的参数传递