74.Python中ORM聚合函數詳解:Max,Min

Max和Min:獲取指定對象的最大值和最小值。

1. 好比:想要獲取Author表中的最大的年齡和最小的年齡。示例代碼以下:
from django.http import HttpResponse
from .models import Author
from django.db.models import Max, Min
from django.db import connection


def index(request):
# Max和Min
    result = Author.objects.aggregate(max_age=Max('age'),min_age=Min('age'))
    print(result)
    return HttpResponse("success !")

輸出結果:

{'max_age': 57, 'min_age': 34}python

一樣能夠打印出django底層使用的原生SQL語句:
print(connection.queries)
[{'sql': 'SELECT @@SQL_AUTO_IS_NULL', 'time': '0.000'}, 
{'sql': 'SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED', 'time': '0.000'}, 
{'sql': 'SELECT MAX(`author`.`age`) AS `max_age`, MIN(`author`.`age`) AS `min_age` FROM `author`', 'time': '0.000'}]
2.好比:咱們想要獲取每一種圖書預約時的最高價格和最低價格。示例代碼以下:
from django.http import HttpResponse
from .models import Author,Publisher,Book,BookOrder
from django.db.models import Avg,Count,Sum, Max, Min
from django.db import connection


def index(request):
# 獲取每一種圖書預約價格的最高值和最低值
    books = Book.objects.annotate(max_price=Max('bookorder__price'), min_price=Min('bookorder__price'))
    for book in books:
        print("%s,最高價格:%s,最低價格:%s" % (book.name,book.max_price, book.min_price))
        
    # 打印出結果:
    # 三國演義,最高價格:104.0,最低價格:99.0
    # 水滸傳,最高價格:115.0,最低價格:100.0
    # 紅樓夢,最高價格:105.0,最低價格:99.0
    # 西遊記,最高價格:None,最低價格:None
    return HttpResponse("success !")
相關文章
相關標籤/搜索