集約クエリは、複数のインデックス エンティティのデータを処理して、1 つのサマリー値を返します。Datastore モードの Firestore は、次の集計クエリをサポートしています。
count()
sum()
avg()
集計クエリは、アプリケーション コードを簡素化し、処理のために各エンティティを取得する場合よりもコストを削減します。このページでは、集約クエリの使用方法について説明します。
count()
集計
count()
集計を使用して、特定のクエリに一致するインデックス付きエンティティの合計数を返します。たとえば、この count()
集計は、1 種類のエンティティの合計数を返します。
Java
Python
Go
aggregationCountQuery := datastore.NewQuery("Task"). NewAggregationQuery(). WithCount("total_tasks") countResults, err := client.RunAggregationQuery(ctx, aggregationCountQuery) count := countResults["total_tasks"] countValue := count.(*datastorepb.Value) fmt.Printf("Number of results from query: %d\n", countValue.GetIntegerValue())
GQL
AGGREGATE COUNT(*) AS total OVER ( SELECT * AS total FROM tasks )
GQL は、簡略化した形式の count()
クエリをサポートしています。
SELECT COUNT(*) AS total FROM tasks
この例では、total
のオプション エイリアスを使用します。
簡略な形式では、FROM
句と WHERE
句のみをサポートしています。詳細については、GQL リファレンスをご覧ください。
count()
集約では、クエリに対するフィルタと、limit
句が考慮されます。たとえば、次の集計は、指定されたフィルタに一致するエンティティの総数を返します。
Java
Python
Go
aggregationCountQuery := datastore.NewQuery("Task"). FilterField("done", "=", true). NewAggregationQuery(). WithCount("total_tasks_done") countResults, err := client.RunAggregationQuery(ctx, aggregationCountQuery) count := countResults["total_tasks_done"] countValue := count.(*datastorepb.Value) fmt.Printf("Number of results from query: %d\n", countValue.GetIntegerValue())
GQL
AGGREGATE COUNT(*) OVER ( SELECT * FROM tasks WHERE is_done = false AND tag = 'house')
GQL は、簡略化した形式の count()
クエリをサポートしています。
SELECT COUNT(*) AS total FROM tasks WHERE is_done = false AND tag = 'house'
この例では、total
のオプション エイリアスを使用します。
簡略な形式では、FROM
句と WHERE
句のみをサポートしています。詳細については、GQL リファレンスをご覧ください。
次の例は、特定の値までカウントする方法を示しています。これを使用すると、たとえば、特定の数でカウントを停止して、その数を超えたことをユーザーに知らせることができます。
Java
Python
Go
aggregationCountQuery := datastore.NewQuery("Task"). Limit(2). NewAggregationQuery(). WithCount("at_least") countResults, err := client.RunAggregationQuery(ctx, aggregationCountQuery) count := countResults["at_least"] countValue := count.(*datastorepb.Value) fmt.Printf("We have at least %d tasks\n", countValue.GetIntegerValue())
GQL
AGGREGATE COUNT_UP_TO(1000) OVER ( SELECT * FROM tasks WHERE is_done = false)
GQL は、簡略化した形式の count_up_to()
クエリをサポートしています。
SELECT COUNT_UP_TO(1000) AS total FROM tasks WHERE is_done = false AND tag = 'house'
この例では、total
のオプション エイリアスを使用します。
簡略な形式では、FROM
句と WHERE
句のみをサポートしています。詳細については、GQL リファレンスをご覧ください。
sum()
集計
sum()
集計を使用して、特定のクエリに一致する数値の合計を返します。たとえば、次の sum()
集計は、指定された種類のエンティティから指定されたプロパティの数値の合計を返します。
Java
Python
Go
aggregationSumQuery := datastore.NewQuery("Task"). NewAggregationQuery(). WithSum("hours", "total_hours") sumResults, err := client.RunAggregationQuery(ctx, aggregationSumQuery) sum := sumResults["total_hours"] sumValue := sum.(*datastorepb.Value) fmt.Printf("Sum of results from query: %d\n", sumValue.GetIntegerValue())
GQL
AGGREGATE SUM(hours) AS total_hours OVER ( SELECT * FROM tasks )
GQL は、簡略化した形式の sum()
クエリをサポートしています。
SELECT SUM(hours) AS total_hours FROM tasks
この例では、total_hours
のオプション エイリアスを使用します。
簡略な形式では、FROM
句と WHERE
句のみをサポートしています。詳細については、GQL リファレンスをご覧ください。
sum()
集約では、クエリに対するフィルタと、limit
句が考慮されます。たとえば、次の集計は、指定されたフィルタに一致するエンティティの数値を持つ指定されたプロパティの合計を返します。
Java
Python
このクエリには、次のようなインデックスが必要です。
- kind: Task properties: - name: done - name: hours
Go
aggregationSumQuery := datastore.NewQuery("Task"). FilterField("done", "=", false). FilterField("tag", "=", "house"). NewAggregationQuery(). WithSum("hours", "total_hours") sumResults, err := client.RunAggregationQuery(ctx, aggregationSumQuery) sum := sumResults["total_hours"] sumValue := sum.(*datastorepb.Value) fmt.Printf("Sum of results from query: %d\n", sumValue.GetIntegerValue())
GQL
AGGREGATE SUM(hours) AS total_hours OVER ( SELECT * FROM tasks WHERE is_done = false AND tag = 'house' )
GQL は、簡略化した形式の sum()
クエリをサポートしています。
SELECT SUM(hours) AS total_hours FROM tasks WHERE is_done = false AND tag = 'house'
この例では、total_hours
のオプション エイリアスを使用します。
簡略な形式では、FROM
句と WHERE
句のみをサポートしています。詳細については、GQL リファレンスをご覧ください。
avg()
集計
avg()
集計を使用して、特定のクエリに一致する数値の平均を返します。たとえば、次の avg()
集計は、クエリに一致するエンティティの数値プロパティ値から、指定されたプロパティの算術平均を返します。