---
title: "PostgreSQL 固有のクエリ式"
version: 5.2
locale: ja
source: https://docs.djangoproject.com/ja/5.2/ref/contrib/postgres/expressions/
canonical: https://djangodocs.dev/ja/5.2/ref/contrib/postgres/expressions/
---
# PostgreSQL 固有のクエリ式

これらの式は `django.contrib.postgres.expressions` モジュールから利用できます。

## `ArraySubquery()` 式

#### `class ArraySubquery(queryset)`

`ArraySubquery` は、PostgreSQL の `ARRAY` コンストラクタを使用してクエリセットから値のリストを構築する [`Subquery`](/ja/5.2/ref/models/expressions/#django.db.models.Subquery) です。クエリセットは [`QuerySet.values()`](/ja/5.2/ref/models/querysets/#django.db.models.query.QuerySet.values) を使用して、1つの列のみを返す必要があります。

このクラスは、[`ArrayAgg`](/ja/5.2/ref/contrib/postgres/aggregates/#django.contrib.postgres.aggregates.ArrayAgg) と異なり、集計関数として機能せず、値のリストを構築する際にSQLの `GROUP BY` 句を必要としません。

例えば、特定の著者に関連する全ての書籍を JSON オブジェクトとしてアノテーションしたい場合は、次のようにします:

```pycon
>>> from django.db.models import OuterRef
>>> from django.db.models.functions import JSONObject
>>> from django.contrib.postgres.expressions import ArraySubquery
>>> books = Book.objects.filter(author=OuterRef("pk")).values(
...     json=JSONObject(title="title", pages="pages")
... )
>>> author = Author.objects.annotate(books=ArraySubquery(books)).first()
>>> author.books
[{'title': 'Solaris', 'pages': 204}, {'title': 'The Cyberiad', 'pages': 295}]
```
