减去刚刚在 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