django 中的聚合函數(shù),分組函數(shù),F(xiàn) 查詢,Q查詢
先以mysql的語句,聚合用在分組里,
對mysql中g(shù)roupby 是分組
每什么的時候就要分組,如 每個小組,就按小組分,
group by 字段 having 聚合函數(shù)
#舉例 :求班里的平均成績, select Avg(score) from stu
在django中
聚合 是aggreate(*args,**kwargs),通過QuerySet 進(jìn)行計算。做求值運(yùn)算的時候使用
分組 是annotate(*args,**kwargs),括號里是條件,遇到 每什么的時候就要分組,
先從models 導(dǎo)入要用到的函數(shù)
from django.db.models import Min,Avg,Max,Sum def aggregate(request): #求所有書籍的平均價格 ret11 = Book.objects.all().aggregate(Avg("price")) # print(ret11)#{'price__avg': 51.975} #求所有書籍的最高價 ret12 = Book.objects.all().aggregate(MaxPrice=Max('price')) # print(ret12)#{'MaxPrice': Decimal('100.00')} #egon 出版過書籍的最高價格 p = Book.objects.filter(authors__name='egon').aggregate(Max('price')) print(p)#{'price__max': Decimal('100.00')} #分組 annotate() #每一個作者出版過的書的最高價 , #解析,按照作者的名字分組,就要用到values,顯示的是字段的名字, b1 = Book.objects.values('authors__name').annotate(Max('price')) print(b1) #<QuerySet [{'authors__name': 'egon', 'price__max': Decimal('100.00')}, # {'authors__name': 'alex', 'price__max': Decimal('100.00')}, # {'authors__name': 'yuan', 'price__max': Decimal('100.00')}, # {'authors__name': 'oldboy', 'price__max': Decimal('100.00')}]># 四個作者都關(guān)聯(lián)了同一本書,而這本書又是最高價 #每個出版社出版的最低價格的書籍 b2 = Book.objects.values('publish__name').annotate(Min('price')) print(b2) #<QuerySet [{'publish__name': '北京出版社', 'price__min': Decimal('100.00')}, # {'publish__name': '河下出版社', 'price__min': Decimal('45.00')}, # {'publish__name': '清華出版社', 'price__min': Decimal('39.90')}, # {'publish__name': '人民出版社', 'price__min': Decimal('23.00')}]>
F Q 查詢
F,主要是做查詢
Q查詢 可以做組合條件的查詢 & 是 與 ,|(管道符) 或,~ 非
def FAndQ(request): #給每本書漲價10元, #用sql語句寫 update book set price=price+10 #F,主要是做查詢 # Book.objects.all().update(price=F('price')+10) #查詢書籍是富開頭,并且價格大于30的書籍 ,逗號 可以做 與 的關(guān)系查詢 b4 = Book.objects.filter(title__startswith="富",price__gt=30) # print(b4)#<QuerySet [<Book: 富爸爸>]> #Q查詢 可以做組合條件的查詢 & 是 與 ,|(管道符) 或,~ 非 ##查詢書籍是富開頭,或價格大于30的書籍 b5 = Book.objects.filter(Q(title__startswith="富") | Q(price__gt=60)) # print(b5) #<QuerySet [<Book: Linux>, <Book: 項塔蘭>, <Book: 追風(fēng)箏的人>, <Book: 富爸爸>]> #組合查詢,以富開頭,價格大于60 ,或者id大于5的書籍 b6 = Book.objects.filter(Q(title__startswith="富")&Q(price__gt=60)|Q(id__gt=5)) #print(b6)#<QuerySet [<Book: 富兒子>]> # #查詢條件如果不加Q,就要放到最后面, b7 = Book.objects.filter(Q(price__gt=60) | Q(id__gt=5),title__startswith="富") # print(b7) # ~ 取反的意思 b8 = Book.objects.filter(Q(title__startswith="富") & ~Q(price__gt=60) | Q(id__gt=5)) print(b8)
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
tensorflow構(gòu)建BP神經(jīng)網(wǎng)絡(luò)的方法
這篇文章主要為大家詳細(xì)介紹了tensorflow構(gòu)建BP神經(jīng)網(wǎng)絡(luò)的方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下2018-03-03使用Python做定時任務(wù)及時了解互聯(lián)網(wǎng)動態(tài)
這篇文章主要介紹了使用Python做定時任務(wù)及時了解互聯(lián)網(wǎng)動態(tài),需要的朋友可以參考下2019-05-05淺談python 調(diào)用open()打開文件時路徑出錯的原因
這篇文章主要介紹了淺談python 調(diào)用open()打開文件時路徑出錯的原因,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-06-06Jupyter Notebook切換虛擬環(huán)境的三種方法
本文主要介紹了Jupyter Notebook切換虛擬環(huán)境的三種方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-07-07Python實現(xiàn)實時顯示進(jìn)度條的6種方法
相信大家對進(jìn)度條一定不陌生了,很多安裝或者下載都會出現(xiàn)進(jìn)度條,本文主要介紹了Python實現(xiàn)實時顯示進(jìn)度條的6種方法,具有一定的參考價值,感興趣的可以了解一下2021-12-12Python中np.linalg.norm()用法實例總結(jié)
在線性代數(shù)中一個向量通過矩陣轉(zhuǎn)換成另一個向量時,原有向量的大小就是向量的范數(shù),這個變化過程的大小就是矩陣的范數(shù),下面這篇文章主要給大家介紹了關(guān)于Python中np.linalg.norm()用法的相關(guān)資料,需要的朋友可以參考下2022-07-07