PostgreSQL固有の集計関数—Djangoドキュメント

提供:Dev Guides
< DjangoDjango/docs/2.2.x/ref/contrib/postgres/aggregates
移動先:案内検索

PostgreSQL固有の集計関数

これらの機能は、django.contrib.postgres.aggregatesモジュールから利用できます。 これらについては、 PostgreSQLドキュメントで詳しく説明されています。

ノート

すべての関数にはデフォルトのエイリアスがないため、明示的に指定する必要があります。 例えば:

>>> SomeModel.objects.aggregate(arr=ArrayAgg('somefield'))
{'arr': [0, 1, 2]}

一般的な集計オプション

すべての集計には、 filter キーワード引数があります。


汎用集計関数

ArrayAgg

class ArrayAgg(expression, distinct=False, filter=None, ordering=(), **extra)

配列に連結された、nullを含む値のリストを返します。

distinct

配列値を区別するかどうかを決定するオプションのブール引数。 デフォルトはFalseです。

ordering

バージョン2.2の新機能。

フィールド名のオプションの文字列(降順を示すオプションの"-"プレフィックス付き)または結果リスト内の要素の順序を指定する式(または文字列や式のタプルまたはリスト) 。

例:

'some_field'
'-some_field'
from django.db.models import F
F('some_field').desc()


BitAnd

class BitAnd(expression, filter=None, **extra)
null以外のすべての入力値のビット単位のANDintを返します。すべての値がnullの場合は、Noneを返します。


BitOr

class BitOr(expression, filter=None, **extra)
null以外のすべての入力値のビット単位のORintを返します。すべての値がnullの場合は、Noneを返します。


BoolAnd

class BoolAnd(expression, filter=None, **extra)
すべての入力値がtrueの場合はTrueを返し、すべての値がnullの場合はNoneを返し、それ以外の場合はFalseを返します。


BoolOr

class BoolOr(expression, filter=None, **extra)
少なくとも1つの入力値がtrueの場合はTrueを返し、すべての値がnullの場合はNoneを返し、値がない場合はFalseを返します。


JSONBAgg

class JSONBAgg(expressions, filter=None, **extra)
入力値をJSON配列として返します。 PostgreSQL≥9.5が必要です。


StringAgg

class StringAgg(expression, delimiter, distinct=False, filter=None, ordering=())

delimiter文字列で区切られた文字列に連結された入力値を返します。

delimiter

必須の引数。 文字列である必要があります。

distinct

連結された値が区別されるかどうかを決定するオプションのブール引数。 デフォルトはFalseです。

ordering

バージョン2.2の新機能。

フィールド名のオプションの文字列(降順を示すオプションの"-"プレフィックス付き)または結果文字列内の要素の順序を指定する式(または文字列や式のタプルまたはリスト) 。

例は ArrayAgg.ordering の場合と同じです。


統計の集計関数

yおよびx

これらすべての関数の引数yおよびxは、フィールドの名前または数値データを返す式にすることができます。 両方が必要です。


Corr

class Corr(y, x, filter=None)
相関係数をfloatとして返します。一致する行がない場合は、Noneとして返します。


CovarPop

class CovarPop(y, x, sample=False, filter=None)

母共分散をfloatとして返します。一致する行がない場合は、Noneとして返します。

オプションの引数が1つあります。

sample

デフォルトでは、CovarPopは一般的な母共分散を返します。 ただし、sample=Trueの場合、戻り値はサンプルの母共分散になります。


RegrAvgX

class RegrAvgX(y, x, filter=None)
独立変数(sum(x)/N)の平均をfloatとして返します。一致する行がない場合は、Noneを返します。


RegrAvgY

class RegrAvgY(y, x, filter=None)
従属変数(sum(y)/N)の平均をfloatとして、または一致する行がない場合はNoneとして返します。


RegrCount

class RegrCount(y, x, filter=None)
両方の式がnullでない入力行数のintを返します。


RegrIntercept

class RegrIntercept(y, x, filter=None)
(x, y)ペアによって決定された最小二乗近似線形方程式のy切片をfloatとして、または一致する行がない場合はNoneとして返します。


RegrR2

class RegrR2(y, x, filter=None)
相関係数の2乗をfloatとして返します。一致する行がない場合は、Noneを返します。


RegrSlope

class RegrSlope(y, x, filter=None)
(x, y)ペアによって決定された最小二乗近似線形方程式の傾きをfloatとして、または一致する行がない場合はNoneとして返します。


RegrSXX

class RegrSXX(y, x, filter=None)
sum(x^2) - sum(x)^2/N(独立変数の「二乗和」)をfloatとして返します。一致する行がない場合は、Noneを返します。


RegrSXY

class RegrSXY(y, x, filter=None)
sum(x*y) - sum(x) * sum(y)/N(独立した時間従属変数の「積の合計」)をfloatとして返します。一致する行がない場合は、Noneを返します。


RegrSYY

class RegrSYY(y, x, filter=None)
sum(y^2) - sum(y)^2/N(従属変数の「二乗和」)をfloatとして返します。一致する行がない場合は、Noneを返します。


使用例

このサンプルテーブルを使用します。

| FIELD1 | FIELD2 | FIELD3 |
|--------|--------|--------|
|    foo |      1 |     13 |
|    bar |      2 | (null) |
|   test |      3 |     13 |

いくつかの汎用集計関数の例を次に示します。

>>> TestModel.objects.aggregate(result=StringAgg('field1', delimiter=';'))
{'result': 'foo;bar;test'}
>>> TestModel.objects.aggregate(result=ArrayAgg('field2'))
{'result': [1, 2, 3]}
>>> TestModel.objects.aggregate(result=ArrayAgg('field1'))
{'result': ['foo', 'bar', 'test']}

次の例は、統計集計関数の使用法を示しています。 基礎となる数学については説明しません(これについては、たとえば wikipedia で読むことができます)。

>>> TestModel.objects.aggregate(count=RegrCount(y='field3', x='field2'))
{'count': 2}
>>> TestModel.objects.aggregate(avgx=RegrAvgX(y='field3', x='field2'),
...                             avgy=RegrAvgY(y='field3', x='field2'))
{'avgx': 2, 'avgy': 13}