【问题标题】:Substraction by the column just created in bigquery减去刚刚在 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)

标签: sql google-bigquery


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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-05-03
      • 1970-01-01
      • 2020-04-26
      • 2022-01-17
      • 2016-11-28
      • 1970-01-01
      • 2014-02-21
      • 2020-07-29
      相关资源
      最近更新 更多