2

私は、以下に対処するための効率的な(っぽい)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
    

複数の SELECT を使用せずに BigQuery でこれを行う方法を知っている人はいますか?

乾杯。

4

2 に答える 2

1

複数の SELECT を使用せずに BigQuery でこれを行う方法を知っている人はいますか?

標準 SQL を使用した 1 つの 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
于 2017-01-13T22:16:33.637 に答える