0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

QUERY関数についての覚書

Posted at

QUERY関数は、Googleスプレッドシート上でデータの検索、フィルタリング、集計を行うための関数です。SQLのように、クエリを書くことで複数の条件を指定してデータを取得できます。

基本的な構文

=QUERY(data, query, [headers])
  • data:検索するデータがある範囲を指定します。例えば、シート名を含む範囲、A1から始まる範囲などです。

  • query:検索条件を記述します。SQLに似た記述方法で、SELECT、WHERE、GROUP BY、ORDER BYなどのキーワードを使用してデータをフィルタリング、並べ替え、集計することができます。

  • headers:省略可能なパラメータで、データのヘッダーを表示するかどうかを指定します。

データの例

名前 年齢 都道府県
田中 20 東京都
山田 25 大阪府
鈴木 30 東京都
佐藤 35 北海道

このデータから、年齢が30歳以上で、都道府県が東京都の人の名前と年齢を取得するには、以下のようなQUERY関数を使用します。

=QUERY(A1:C5, "SELECT A, B WHERE B >= 30 AND C = '東京都'")

この場合、A1からC5の範囲を検索し、年齢が30以上かつ都道府県が東京都の人の名前と年齢を取得します。結果は以下のようになります。

名前 年齢
鈴木 30

このように、QUERY関数を使うことで、スプレッドシート上で高度なデータ分析を行うことができます。

QUERY関数のキーワードについて

  • SELECT
    SELECTキーワードは、取得する列を指定するために使用します。以下のように、列名や範囲を指定することができます。
SELECT A
SELECT A, B
SELECT A:C
  • WHERE
    WHEREキーワードは、検索条件を指定するために使用します。以下のように、条件式を記述することができます。
WHERE A > 10
WHERE A = 'abc'
WHERE A LIKE '%def%'
  • ORDER BY
    ORDER BYキーワードは、取得したデータの並べ替えを指定するために使用します。以下のように、並べ替えの基準と方向を指定することができます。
ORDER BY A ASC
ORDER BY B DESC
ORDER BY A, B DESC
  • GROUP BY
    GROUP BYキーワードは、取得したデータをグループ化するために使用します。以下のように、グループ化する列を指定することができます。
GROUP BY A
GROUP BY A, B
  • LIMIT
    LIMITキーワードは、取得するデータの件数を制限するために使用します。以下のように、取得する行数を指定することができます。
LIMIT 10
LIMIT 10 OFFSET 20
  • OFFSET
    OFFSETキーワードは、取得するデータの先頭行を指定するために使用します。LIMITキーワードと一緒に使用することが多いです。以下のように、取得する行数と先頭行の位置を指定することができます。
OFFSET 10
LIMIT 10 OFFSET 20

これらのキーワードを組み合わせることで、複雑なデータ分析が可能になります。以下に例を示します。

各キーワードの使用例

=QUERY(A1:C5, "SELECT A, AVG(B) WHERE C = '東京都' GROUP BY A ORDER BY AVG(B) DESC LIMIT 3")

この場合、A1からC5の範囲を検索し、都道府県が東京都の人の名前と年齢の平均値を求め、名前でグループ化して平均値の降順で並べ替えます。そして、平均値の上位3件を取得します。

QUERY関数では、日付を条件に入れることができます。以下に、日付を条件に入れた場合の例を示します。

=QUERY(A1:C5, "SELECT A, B WHERE C > date '2022-01-01'")

この場合、A1からC5の範囲を検索し、日付が2022年1月1日よりも後のデータを取得します。日付は、date '年-月-日'の形式で指定することができます。

また、以下のように、日付を範囲指定することもできます。

=QUERY(A1:C5, "SELECT A, B WHERE C >= date '2022-01-01' AND C <= date '2022-03-31'")

この場合、A1からC5の範囲を検索し、日付が2022年1月1日から3月31日までのデータを取得します。>=と<=を使って、範囲を指定することができます。

なお、日付には時刻情報も含めることができます。以下のように、日時を条件に指定することもできます。

=QUERY(A1:D5, "SELECT A, B WHERE C >= timestamp '2022-01-01 00:00:00' AND C <= timestamp '2022-01-01 23:59:59'")

この場合、A1からD5の範囲を検索し、日時が2022年1月1日のデータを取得します。timestamp '年-月-日 時:分:秒'の形式で指定することができます。

特定条件下で、特定列のみ抽出する例

例:2023年05月01日以降に生まれたユーザーだけを抽出し、nameだけを出力させる場合

=QUERY(A1:C, "SELECT B WHERE A > date '2023-05-01'")

この場合、A列には生年月日が入っており、B列にはユーザー名が入っていると仮定しています。
A1からCの範囲を検索し、A列が2023年05月01日以降のユーザーの名前をB列から取得します。SELECT句には、nameを指定するためにB列を指定しています。また、条件にはWHERE句を使用し、A列が指定した日付よりも後のデータのみを取得します。

なお、もしA列に生年月日だけでなく生年月日と時刻が入っている場合は、dateの代わりにdatetimeを使用して以下のように書き換える必要があります。

=QUERY(A1:C, "SELECT B WHERE A > datetime '2023-05-01 00:00:00'")

このように、条件を変更することで、特定の列のみを抽出することができます。

0
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?