ホームページ > データベース > mysql チュートリアル > BigQuery で行を列に転置するにはどうすればよいですか?

BigQuery で行を列に転置するにはどうすればよいですか?

Mary-Kate Olsen
リリース: 2025-01-05 18:33:43
オリジナル
484 人が閲覧しました

How to Transpose Rows into Columns in BigQuery?

BigQuery で行を列に転置する: ピボットの実装

行を列に転置する (ピボットとも呼ばれる) と、キーと値のペアを新しいテーブルに変換できます。ここで、キーは列名になり、値は対応するセルに配置されます。 BigQuery はピボット関数をネイティブにサポートしていませんが、簡単なアプローチを使用してこれを実現できます。

入力テーブルの構造

まず、入力テーブルに次の列があることを確認します。

  • Key: それぞれのカテゴリを指定する列row.
  • Value: key に対応する値。

さらに、単一に結合する必要がある行をグループ化する列が必要になります。

ステップ 1: 入力データを転置されたクエリに変換するString

ステップ 1 では、実行時に転置されたクエリを生成するクエリ文字列を作成します。次のクエリを実行します。

SELECT 'SELECT id, ' + 
   GROUP_CONCAT_UNQUOTED(
      'MAX(IF(key = "' + key + '", value, NULL)) as [' + key + ']'
   ) 
   + ' FROM yourTable GROUP BY id ORDER BY id'
FROM (
  SELECT key 
  FROM yourTable
  GROUP BY key
  ORDER BY key
) 
ログイン後にコピー

ステップ 2: 転置クエリの実行

ステップ 1 の結果をコピーし、通常のクエリとして実行します。これにより、転置されたデータを含むテーブルが生成されます。

SELECT 
  id, 
  MAX(IF(key = "channel_id", value, NULL)) AS [channel_id],
  MAX(IF(key = "channel_title", value, NULL)) AS [channel_title],
  MAX(IF(key = "examId", value, NULL)) AS [examId],
  MAX(IF(key = "postId", value, NULL)) AS [postId],
  MAX(IF(key = "youtube_id", value, NULL)) AS [youtube_id] 
FROM yourTable 
GROUP BY id 
ORDER BY id
ログイン後にコピー

結果のテーブルは次の構造になります。

id channel_id channel_title examId postId youtube_id
1 UCiDKcjKocimAO1tV Mahendra Guru 72975611-4a5e-11e5 1189e340-b08f ugEGMG4-MdA
2 UCODeKM_D6JLf8jJt Ab Live 72975611-4a5e-11e5 0c3e6590-afeb 3TNbtTwLY0U

テーブルのサイズが大きい場合は、列の数が少ない場合は、転置クエリを手動で作成することでステップ 1 をスキップできます。ただし、ステップ 1 では、クエリを動的に生成するための迅速かつ便利な方法が提供されます。

以上がBigQuery で行を列に転置するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート