在 Django 中作为 GROUP BY 查询
大多数人都熟悉 SQL,并且知道如何使用 GROUP BY 子句编写 SQL 查询以分组获取数据。 使用 GROUP BY 子句,我们可以根据单列或多列值创建一组记录并执行聚合功能。
在本文中,我们假设我们正在处理 Bike 数据库,其中包含 Bike_id、Bike_name、Bike_brand、Bike_color、Bike_bought_date、Is_bike_premium、Bike_price 等。
我们将学习使用 GROUP BY 子句对上述 Bike 数据库执行不同的操作。 此外,我们会先使用 GROUP BY 子句编写 SQL 查询,然后将其转换为 Python,以便读者可以轻松理解并快速学会在 Django 中编写查询。
在 Django 中创建 GROUP BY 查询
假设我们要根据颜色统计自行车的数量。 简单来说,我们想根据颜色制作一组自行车,为此,我们在下面编写了 SQL 查询。
SELECT
Bike_color,
COUNT(Bike_id) AS Total_bikes
FROM
Bike
GROUP BY
Bike_color
作为上述 SQL 查询的输出,我们将得到 2 列。 一个是 Bike_color,另一个是 Total_Bikes,代表特定颜色的自行车数量。
现在,我们将上面的 SQL 查询转换为 Python 代码以获得相同的结果。
from django.db.models import Count
Bike.objects
.values('Bike_color')
.annotate(Total_bikes=Count('Bike_id'))
输出:
-
values()
- 它替换了 SQL 查询的 GROUP BY 子句。 无论我们在 SQL 查询中使用 GROUP BY 子句的什么列,我们都必须将其用作 values() 方法的参数。 -
annotate()
- annotate() 方法将聚合函数作为参数应用于每个组。
这样,我们就可以根据颜色制作一组自行车,并使用 Python 查询计算相同颜色的自行车的数量。
如果用户在 values()
之前调用 annotate()
函数,它不会将聚合函数应用于组的行,而是整条记录。 因此,请确保您在编写查询时使用的方法的顺序。
对 GROUP BY 查询使用多个聚合
在这里,我们将根据颜色制作一组自行车。 之后,我们将使用 Count()
聚合函数对每种颜色的自行车进行计数,并使用 Min() 聚合函数从每组中获得成本最低的自行车。
SELECT
Bike_color,
COUNT(Bike_id) AS Total_bikes,
MIN(Bike_price) As cheap_bike
FROM
Bike
GROUP BY
Bike_color
下面,我们将上述 SQL 查询转换为 Python 代码。
from django.db.models import Count
from django.db.models import Min
Bike.objects
.values('Bike_color')
.annotate(Total_bikes=Count('Bike_id'), cheap_bike=Min('Bike_price'))
输出:
这样,我们就在 Python 中将 Count()
和 Min()
多个聚合函数与 group by 查询一起使用了。
GROUP BY 多列记录
在下面的 SQL 查询中,我们使用了带有 GROUP BY 子句的 Bike_color 和 Is_bike_premium 字段。 查询将根据记录的颜色以及它们是否属于高级类别对记录进行分组。
SELECT
Bike_color,
Is_bike_premium,
COUNT(Bike_id) AS Total_bikes,
FROM
Bike
GROUP BY
Bike_color,
Is_bike_premium
我们必须在 values()
方法中添加多个字段,以将上述 SQL 查询转换为 Python 代码。
from django.db.models import Count
Bike.objects
.values('Bike_color','Is_bike_premium')
.annotate(Total_bikes=Count('Bike_id'))
输出:
从每个组中过滤记录
在本节中,我们将根据其颜色对 Bike 表的所有记录进行分组,并从每个组中筛选出所有非高级自行车。 简单来说,我们将根据颜色制作一组非高级自行车。
我们在下面的 SQL 查询中使用了 WHERE 子句来过滤自行车。
SELECT
Bike_color,
COUNT(Bike_id) AS Total_bikes
FROM
Bike
WHERE
Is_bike_premium = False
GROUP BY
Bike_color
为了将上述 SQL 查询转换为 Python 代码,我们使用了 Python 的 filter() 方法并将过滤条件作为参数传递。
from django.db.models import Count
Bike.objects
.values('Bike_color')
.filter(Is_bike_premium=False )
.annotate(Total_bikes=Count('Bike_id'))
输出:
在本文中,我们学习了在 Django 中创建 GROUP BY 查询。 此外,我们还看到了分组查询的不同用例。
此外,用户可以使用 group by 查询和 orderBy()
方法对每个组的记录进行排序。
相关文章
Django 中的 Slug
发布时间:2023/05/04 浏览次数:173 分类:Python
-
本篇文章旨在定义一个 slug 以及我们如何使用 slug 字段在 Python 中使用 Django 获得独特的帖子。
在 Django 中按降序过滤查询集中的项目
发布时间:2023/05/04 浏览次数:157 分类:Python
-
在这个讲解中,学习如何借助 Django 中的 order_by() 方法按降序过滤出查询集中的项目。
Django ALLOWED_HOSTS 介绍
发布时间:2023/05/04 浏览次数:181 分类:Python
-
本文展示了如何创建您的 Django 网站,为公开发布做好准备,如何设置 ALLOWED_HOSTS 以及如何在使用 Django 进行 Web 部署期间修复预期的主要问题。
Django 中的 Select_related 方法
发布时间:2023/05/04 浏览次数:129 分类:Python
-
本文介绍了什么是查询集,如何处理这些查询以及我们如何利用 select_related() 方法来过滤 Django 中相关模型的查询。
使用 Post 请求将数据发送到 Django 服务器
发布时间:2023/05/04 浏览次数:159 分类:Python
-
在这篇关于Django的讲解中,我们简要介绍了post和get请求以及如何在Django中用post实现CSRF token。
Django 返回 JSON
发布时间:2023/05/04 浏览次数:106 分类:Python
-
在与我们的讨论中,我们简要介绍了 JSON 格式,并讨论了如何借助 Django 中的 JsonResponse 类将数据返回为 JSON 格式。
在 Django 中创建对象
发布时间:2023/05/04 浏览次数:59 分类:Python
-
本文的目的是解释什么是模型以及如何使用 create() 方法创建对象,并了解如何在 Django 中使用 save() 方法。
在 Django 中为多项选择创建字段
发布时间:2023/05/04 浏览次数:75 分类:Python
-
在本文中,我们将着眼于为多项选择创建一个字段,并向您展示如何允许用户在 Django 中进行多项选择。