Fungsi pengumpulan khusus PostgreSQL

Fungsi-fungsi ini tersedia dari modul``django.contrib.postgres.aggregates``. Mereka digambarkan dalam lebih rinci dalam PostgreSQL docs.

Catatan

Semua fungsi-fungsi tanpa nama lain awalan, jadi anda harus jelas menyediakan satu. Sebagai contoh:

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

Pilihan pengumpulan umum

Semua keseluruhan mempunyai argumen kata kunci filter.

Fungsi pengumpulan tujuan-umum

ArrayAgg

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

Mengembalikan daftar nilai, termasuk null, disambungkan kedalam larik.

distinct

Sebuah argumen boolean pilihan yang menentukan jika nilai senarai akan berbeda. Awalan pada False.

ordering
New in Django 2.2.

Sebuah string pilihan dari sebuah nama bidang (dengan sebuah awalan "-" pilihan yang menunjukkan urutan menurun) atau sebuah pernyataan (atau sebuah tuple atau list dari string dan/atau pernyataan) yang menentukan urutan dari unsur dalam daftar hasil.

Contoh:

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

BitAnd

class BitAnd(expression, filter=None, **extra)[sumber]

Mengembalikan sebuah int dari bitwise AND dari semua nilai-nilai masukan bukan-null, atau None jika semua nilai-nilai adalah null.

BitOr

class BitOr(expression, filter=None, **extra)[sumber]

Mengembalikan sebuah int dari bitwise OR dari semua nilai-nilai masukan bukan-null, atau None jika semua nilai-nilai adalah null.

BoolAnd

class BoolAnd(expression, filter=None, **extra)[sumber]

Mengembalikan True, jika semua nilai-nilai masukan adalah true, None jika semua nilai-nilai adalah null jika tidak ada nilai, jika tidak False.

BoolOr

class BoolOr(expression, filter=None, **extra)[sumber]

Mengembalikan True, jika setidaknya satu nilai masukan adalah true, None jika semua nilai-nilai adalah null atau, j jika tidak ada nilai, jika tidak False.

JSONBAgg

class JSONBAgg(expressions, filter=None, **extra)[sumber]

Mengembalikan nilai masukan sebagai sebuah senarai JSON. Membutuhkan PostgreSQL ≥ 9.5.

StringAgg

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

Mengembalikan nilai-nilai masukan digabungkan kedalam string, dipisah berdasarkan string delimiter

delimiter

Diwajibkan argumen. Butuh berupa sebuah string.

distinct

Sebuah argumen boolean pilihan yang menentukan jika nilai yang digabungkan akan berbeda. Awalan menjadi False.

ordering
New in Django 2.2.

Sebuah string pilihan dari sebuah bidang nama (dengan awalan "-" pilihan yang menunjukkan urutan menurun) atau sebuah pernyataan (atau sebuah tuple atau list dari string dan/atau pernyataan) yang menentukan urutan dari unsur dalam hasil string.

Contoh-contoh adalah sama seperti untuk ArrayAgg.ordering.

Fungsi-fungsi pengumpulan untuk statistik

y dan x

Argumen-argumen y dan x untuk semua fungsi-fungsi ini dapat dinamai dari bidang atau sebuah pernyataan mengembalikan data numerik. Kedua diwajibkan.

Corr

class Corr(y, x, filter=None)[sumber]

Mengembalikan hubungan yang menyokong sebagai sebuah float, atau None jika tidak ada baris yang cocok.

CovarPop

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

Mengembalikan populasi kovarian sebagai sebuah float, atau None jika tidak ada baris yang cocok.

Mempunyai satu argumen pilihan:

sample

Secara awalan CovarPop mengembalikan populasi kovarian umum. Bagaimanapun, jika sample=True, nilai kembalian akan berupa contoh populasi kovarian.

RegrAvgX

class RegrAvgX(y, x, filter=None)[sumber]

Mengembalikan rata-rata variabel berdiri sendiri (sum(x)/N) sebagai sebuah float, atau None jika tidak ada baris yang cocok.

RegrAvgY

class RegrAvgY(y, x, filter=None)[sumber]

mengembalikan rata-rata variabel berdiri sendiri (sum(y)/N) sebagai float, atau None jika tidak ada baris yang cocok.

RegrCount

class RegrCount(y, x, filter=None)[sumber]

Mengembalikan sebuah int dari angka dari baris masukan dimana kedua pernyataan tidak null.

RegrIntercept

class RegrIntercept(y, x, filter=None)[sumber]

Mengembalikan pemotongan-y dari persamaan linear kuadrat-pas ditentukan oleh pasangan (x,y) sebagai sebuah float, atau ``None jika tidak ada baris yang cocok.

RegrR2

class RegrR2(y, x, filter=None)[sumber]

Mengembalikan kuadrat dari hubungan koefisien sebagai sebuah float, atau None jika tidak ada baris yang cocok.

RegrSlope

class RegrSlope(y, x, filter=None)[sumber]

Mengembalikan lereng dari persamaan linear kuadrat-pas ditentukan oleh pasangan (x,y) sebagai sebuah float, atau ``None jika tidak ada baris yang cocok.

RegrSXX

class RegrSXX(y, x, filter=None)[sumber]

Mengembalikan sum(x^2) - sum(x)^2/N ("sum of squares" dari variabel berdiri sendiri) sebagai sebuah float, atau ``None jika tidak ada baris yang cocok.

RegrSXY

class RegrSXY(y, x, filter=None)[sumber]

Mengembalikan sum(x*y) - sum(x) * sum(y)/N ("sum of products" dari variabel bergantung waktu berdiri sendiri) sebagai sebuah float, atau ``None jika tidak ada baris yang cocok.

RegrSYY

class RegrSYY(y, x, filter=None)[sumber]

Mengembalikan sum(y^2) - sum(y)^2/N ("sum of squares" dari variabel bergantung) sebagai sebuah float, atau ``None jika tidak ada baris yang cocok.

Contoh penggunaan

Kami akan gunakan tabel contoh ini

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

Ini adalah beberapa contoh dari beberapa fungsi-fungsi pengumpulan tujuan-umum:

>>> 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']}

Contoh selanjutnya menunjukkan penggunaan dari fungsi-fungsi pengumpulan statistik. Jalur pokok akan tidak digambarkan (anda dapat membaca tentang ini, sebagai contoh, pada 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}