减去刚刚在 bigquery 中创建的列

Posted

技术标签:

【中文标题】减去刚刚在 bigquery 中创建的列【英文标题】:Substraction by the column just created in bigquery 【发布时间】:2020-07-27 05:00:07 【问题描述】:

我的查询应该是使用 bigquery 根据数据中的关键字创建新列。例如,如果在数据中包含“迈克”,它将创建迈克列,“约翰”将创建约翰列,并且列表继续...... 但是,我想创建一个“其他”列,即用我刚刚创建的列减去整体名称。

我的代码示例(SUBSTRACT 函数错误):

  SELECT 
   COUNT(Name) as n_name,
        SUM(CASE WHEN Name LIKE '%MIKE%' THEN 1 ELSE 0 END) AS Mike,
        SUM(CASE WHEN Name LIKE '%JOHN%' THEN 1 ELSE 0 END) AS John,
        SUM(CASE WHEN Name LIKE '%MICHAEL%' THEN 1 ELSE 0 END) AS Michael,
        .....
        SUBSTRACT (n_name ,Mike and John)  AS Others
     FROM t 

有什么方法可以对我刚刚创建的列做一些减法吗?

【问题讨论】:

到目前为止,对于另一种情况,您的逻辑实际上看起来是正确的。您的问题到底是什么? 我只是重新表述了我的问题,因为我之前的帖子与我想问的真正问题不同。请查看谢谢 你应该create a Minimal, Reproducible Example,所以我们会看到输入数据和预期输出。否则很难看出你到底想要什么或者你到底有什么问题 @MikhailBerlyant 您只回答 BigQuery 问题吗? 是的。你为什么问? :o) 【参考方案1】:

您可以使用以下方法(BigQuery 标准 SQL)

SELECT *, 
  n_name - Mike - John - Michael AS Other
FROM (
  SELECT 
    COUNT(Name) AS n_name,
    COUNTIF(Name LIKE '%MIKE%') AS Mike,
    COUNTIF(Name LIKE '%JOHN%') AS John,
    COUNTIF(Name LIKE '%MICHAEL%') AS Michael,
  FROM t 
)

【讨论】:

【参考方案2】:
 SELECT 
     *
     ,n_name - Mike - John - Michael AS Other
     FROM 
        (
            SELECT 
                COUNT(Name) AS n_name
                ,COUNT(CASE WHEN Name like '%MIKE%' THEN 1 END) AS Mike
                ,COUNT(CASE WHEN Name LIKE '%JOHN%' THEN 1 END) AS John
                ,COUNT(CASE WHEN Name LIKE '%MICHAEL%' THEN 1 END) AS Michael
            FROM 
                t
        ) aa

【讨论】:

以上是关于减去刚刚在 bigquery 中创建的列的主要内容,如果未能解决你的问题,请参考以下文章

在 Google BigQuery 中创建 CSV 表的困难

sql [BigQuery - Facebook产品目录]查询para obtenerelcatálogodeproductos de Kichink。 #facebook #bigqu

BigQuery - 在插入表时调用查询

如何将我之前在 sql 中创建的列更改为外键

Drupal:从ddbb中创建的列中获取确切的日期

如何在 bigquery 中创建 Delta