1. ホーム
  2. sql

Googleスプレッドシートの「=QUERY」join()相当関数?

2023-09-26 05:20:21

質問

この質問は、Googleスプレッドシートで=QUERY関数を使用して2つのデータベースを結合することに関するものです。

私は範囲A1:C3に次のようなテーブルを持っています。

a d g
b e h
c f i

別のテーブルがあります

c j m
a k n
b l o

最終的なテーブルをこのようにしたい

a d g k n
b e h l o 
c f i j m

セルD1にvlookup関数を使用して、それを下と横に貼り付けることで簡単にできますが、私のデータセットは巨大です。私はvlookupのページ全体を必要とし、Googleスプレッドシートは、複雑さの点で私の限界に達していると伝えます。

Googleのクエリ言語リファレンスを見ると...言及されている"join"関数のタイプがないようです。あなたはそれが簡単な"join on A"タイプの操作であると思うかもしれません。

どなたか、vlookupを使わずに解決できる方はいらっしゃいませんか?

どのように解決するには?

短い答え

Google QUERY言語 バージョン0.7(2016)ではJOIN(LEFT JOIN)演算子がありませんが、結果をQUERY関数の入力として使用したり、他の用途に使用できる配列式を使用することで実現できます。

説明

配列式と の配列処理機能 を使えば、単純な2つのテーブル間のJOINが可能になります。読みやすくするために、提案された数式では、範囲参照の代わりに名前付き範囲を使用しています。

名前付き範囲

  • テーブル1:シート1!A1:C3
  • テーブル2:シート2!A1:C3
  • ID : シート1!A1:A3

計算式

=ArrayFormula(
   {
     table1,
     vlookup(ID,table2,COLUMN(Indirect("R1C2:R1C"&COLUMNS(table2),0)),0)
   }
)

備考

  • オープンエンドの範囲を使用することは可能ですが、これはスプレッドシートの速度を低下させる可能性があります。
  • 再計算の時間を短縮するため :
  1. 置き換え Indirect("R1C2:R1C"&COLUMNS(table2),0) を 2 から table2 の列数までの定数の配列で置き換える。
  2. スプレッドシートから空の行を削除します。

参照 このシート を参照してください。

注意事項

2017年、GoogleはQUERYに関する英語の公式ヘルプ記事を改善しました。 QUERYの機能 . まだこのようなトピックは含まれていませんが、仕組みを理解するのに役立つと思います。