迹忆客 专注技术分享

当前位置:主页 > 学无止境 > 编程语言 > Python >

在 Django 中作为 GROUP BY 查询

作者:迹忆客 最近更新:2023/05/04 浏览次数:

大多数人都熟悉 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'))

输出:

create django groupby

  • 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'))

输出:

django groupby multiple

这样,我们就在 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'))

输出:

django groupby multiple columns


从每个组中过滤记录

在本节中,我们将根据其颜色对 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 groupby filter

在本文中,我们学习了在 Django 中创建 GROUP BY 查询。 此外,我们还看到了分组查询的不同用例。

此外,用户可以使用 group by 查询和 orderBy() 方法对每个组的记录进行排序。

转载请发邮件至 1244347461@qq.com 进行申请,经作者同意之后,转载请以链接形式注明出处

本文地址:

相关文章

Django 中的 Slug

发布时间:2023/05/04 浏览次数:173 分类:Python

本篇文章旨在定义一个 slug 以及我们如何使用 slug 字段在 Python 中使用 Django 获得独特的帖子。

Django ALLOWED_HOSTS 介绍

发布时间:2023/05/04 浏览次数:181 分类:Python

本文展示了如何创建您的 Django 网站,为公开发布做好准备,如何设置 ALLOWED_HOSTS 以及如何在使用 Django 进行 Web 部署期间修复预期的主要问题。

Django 中的 Select_related 方法

发布时间:2023/05/04 浏览次数:129 分类:Python

本文介绍了什么是查询集,如何处理这些查询以及我们如何利用 select_related() 方法来过滤 Django 中相关模型的查询。

在 Django 中上传媒体文件

发布时间:2023/05/04 浏览次数:198 分类:Python

在本文中,我们简要介绍了媒体文件以及如何在 Django 项目中操作媒体文件。

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 中进行多项选择。

扫一扫阅读全部技术教程

社交账号
  • https://www.github.com/onmpw
  • qq:1244347461

最新推荐

教程更新

热门标签

扫码一下
查看教程更方便