【问题标题】:GBQ SQL: For each unique value in Column A, if value 'X' appears in Column B....then create new Column C with value 'Y', else 'N'GBQ SQL:对于A列中的每个唯一值,如果值'X'出现在B列中......然后创建新的列C,值为'Y',否则为'N'
【发布时间】:2020-06-04 23:43:37
【问题描述】:

我正在使用 Google Big Query 标准 SQL。试图弄清楚如何编写此代码。我有这张桌子。

A   B
1   20
1   20
1   10
2   20
2   30

对于 A 列中的每个唯一值,如果 B 列的值为“10”,则创建一个新的 C 列,其值为“Y”,否则为“N”。

结果应该是这样的。

A   B    C
1   20   Y
1   20   Y
1   10   Y
2   20   N
2   30   N

在这个结果中,由于“1”至少有一次“10”的实例,所有“1”行将在新列 C 中分配一个“Y”值。

【问题讨论】:

    标签: sql google-bigquery aggregate-functions


    【解决方案1】:

    只需使用case 和窗口函数:

    select t.*,
           (case when countif(b = 10) over (partition by a) > 0 then 'Y' else 'N' end) as c
    from t;
    

    BigQuery 完全支持布尔值,所以为什么要使用 'Y''N',什么时候可以使用:

    select t.*,
           (countif(b = 10) over (partition by a) > 0) as c
    from t;
    

    【讨论】:

      猜你喜欢
      • 2020-09-22
      • 2022-01-21
      • 1970-01-01
      • 1970-01-01
      • 2020-03-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多