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]}
ArrayAgg
¶ArrayAgg
(expression, distinct=False, filter=None, ordering=(), **extra)¶Mengembalikan daftar nilai, termasuk null, disambungkan kedalam larik.
distinct
¶Sebuah argumen boolean pilihan yang menentukan jika nilai senarai akan berbeda. Awalan pada False
.
ordering
¶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
¶BitAnd
(expression, filter=None, **extra)¶Mengembalikan sebuah int
dari bitwise AND
dari semua nilai-nilai masukan bukan-null, atau None
jika semua nilai-nilai adalah null.
BitOr
¶BitOr
(expression, filter=None, **extra)¶Mengembalikan sebuah int
dari bitwise OR
dari semua nilai-nilai masukan bukan-null, atau None
jika semua nilai-nilai adalah null.
BoolAnd
¶BoolAnd
(expression, filter=None, **extra)¶Mengembalikan True
, jika semua nilai-nilai masukan adalah true, None
jika semua nilai-nilai adalah null jika tidak ada nilai, jika tidak False
.
Contoh penggunaan:
class Comment(models.Model):
body = models.TextField()
published = models.BooleanField()
rank = models.IntegerField()
>>> from django.db.models import BooleanField, Q
>>> from django.contrib.postgres.aggregates import BoolAnd
>>> Comment.objects.aggregate(booland=BoolAnd('published'))
{'booland': False}
>>> Comment.objects.aggregate(booland=BoolAnd(Q(rank__lt=100), output_field=BooleanField()))
{'booland': True}
BoolOr
¶BoolOr
(expression, filter=None, **extra)¶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
.
Contoh penggunaan:
class Comment(models.Model):
body = models.TextField()
published = models.BooleanField()
rank = models.IntegerField()
>>> from django.db.models import BooleanField, Q
>>> from django.contrib.postgres.aggregates import BoolOr
>>> Comment.objects.aggregate(boolor=BoolOr('published'))
{'boolor': True}
>>> Comment.objects.aggregate(boolor=BoolOr(Q(rank__gt=2), output_field=BooleanField()))
{'boolor': False}
JSONBAgg
¶JSONBAgg
(expressions, filter=None, **extra)¶Mengembalikan nilai masukan sebagai sebuah larik JSON
.
StringAgg
¶StringAgg
(expression, delimiter, distinct=False, filter=None, ordering=())¶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
¶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
.
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
¶Corr
(y, x, filter=None)¶Mengembalikan hubungan yang menyokong sebagai sebuah float
, atau None
jika tidak ada baris yang cocok.
CovarPop
¶CovarPop
(y, x, sample=False, filter=None)¶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
¶RegrAvgX
(y, x, filter=None)¶Mengembalikan rata-rata variabel berdiri sendiri (sum(x)/N
) sebagai sebuah float
, atau None
jika tidak ada baris yang cocok.
RegrAvgY
¶RegrAvgY
(y, x, filter=None)¶mengembalikan rata-rata variabel berdiri sendiri (sum(y)/N
) sebagai float
, atau None
jika tidak ada baris yang cocok.
RegrCount
¶RegrCount
(y, x, filter=None)¶Mengembalikan sebuah int
dari angka dari baris masukan dimana kedua pernyataan tidak null.
RegrIntercept
¶RegrIntercept
(y, x, filter=None)¶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
¶RegrR2
(y, x, filter=None)¶Mengembalikan kuadrat dari hubungan koefisien sebagai sebuah float
, atau None
jika tidak ada baris yang cocok.
RegrSlope
¶RegrSlope
(y, x, filter=None)¶Mengembalikan lereng dari persamaan linear kuadrat-pas ditentukan oleh pasangan (x,y)
sebagai sebuah float, atau ``None
jika tidak ada baris yang cocok.
RegrSXX
¶RegrSXX
(y, x, filter=None)¶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.
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}
Apr 06, 2021