【问题标题】:Google BigQuery SQL for summing individual columns用于汇总各个列的 Google BigQuery SQL
【发布时间】:2013-10-14 01:03:27
【问题描述】:

我正在寻找一个高效的(ish)BigQuery SQL 查询来解决以下问题:

我有一张看起来像这样的表:

Row | Col_A | Col_B | --------------------- 1 | 2 | 3 | 2 | 1 | 4 | 3 | 5 | 7 | 4 | 2 | 3 | 5 | 6 | 1 | ...and so on (>million rows)

每列的值是一个范围为 [1..7] 的 ID。

查询应产生以下内容,即对每一列的每个代码求和:

Code | Total Col_A | Total Col_B -------------------------------- 1 | 1 | 0 2 | 2 | 0 3 | 0 | 2 4 | 0 | 1 5 | 1 | 0 6 | 1 | 0 7 | 0 | 1

有人知道在 BigQuery 中不使用多个 SELECT 的方法吗?

干杯。

【问题讨论】:

  • 请告诉我们您到目前为止所做的尝试。

标签: sql google-bigquery


【解决方案1】:

你能用你的样本数据创建一个公共数据集吗?这将使编写适用于您的数据的查询和验证结果变得更加容易。

一个起始查询:

SELECT Code, COUNT(Col_A) count_column_x, COUNT(Col_B) count_column_y
FROM [your:list.of_codes] a
LEFT JOIN EACH [your:sample.table] b
ON a.Code=b.Col_A
GROUP BY 1

(它并不完美,如果您共享一张桌子,会更进一步)

【讨论】:

    【解决方案2】:

    有人知道在 BigQuery 中不使用多个 SELECT 的方法吗?

    一个带有标准 SQL 的 SELECT

    #standardSQL
    WITH logs AS (
      SELECT 2 AS Col_A, 3 AS Col_B UNION ALL
      SELECT 1 AS Col_A, 4 AS Col_B UNION ALL
      SELECT 5 AS Col_A, 7 AS Col_B UNION ALL
      SELECT 2 AS Col_A, 3 AS Col_B UNION ALL
      SELECT 6 AS Col_A, 1 AS Col_B   
    )
    SELECT 
      id, 
      SUM(CAST(id = Col_A AS INT64)) AS Total_Col_A, 
      SUM(CAST(id = Col_B AS INT64)) AS Total_Col_B
    FROM logs, UNNEST(GENERATE_ARRAY(1,7)) AS id
    GROUP BY id
    ORDER BY id
    

    COUNTIF()

    #standardSQL
    WITH logs AS (
      SELECT 2 AS Col_A, 3 AS Col_B UNION ALL
      SELECT 1 AS Col_A, 4 AS Col_B UNION ALL
      SELECT 5 AS Col_A, 7 AS Col_B UNION ALL
      SELECT 2 AS Col_A, 3 AS Col_B UNION ALL
      SELECT 6 AS Col_A, 1 AS Col_B   
    )
    SELECT 
      id, 
      COUNTIF(id = Col_A) AS Total_Col_A, 
      COUNTIF(id = Col_B) AS Total_Col_B
    FROM logs, UNNEST(GENERATE_ARRAY(1,7)) AS id
    GROUP BY id
    ORDER BY id
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-03-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多