迹忆客 专注技术分享

当前位置:主页 > 学无止境 > 编程语言 > 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 进行申请,经作者同意之后,转载请以链接形式注明出处

本文地址:

相关文章

Pandas read_csv()函数

发布时间:2024/04/24 浏览次数:254 分类:Python

Pandas read_csv()函数将指定的逗号分隔值(csv)文件读取到 DataFrame 中。

Pandas 追加数据到 CSV 中

发布时间:2024/04/24 浏览次数:352 分类:Python

本教程演示了如何在追加模式下使用 to_csv()向现有的 CSV 文件添加数据。

Pandas 多列合并

发布时间:2024/04/24 浏览次数:628 分类:Python

本教程介绍了如何在 Pandas 中使用 DataFrame.merge()方法合并两个 DataFrames。

Pandas loc vs iloc

发布时间:2024/04/24 浏览次数:837 分类:Python

本教程介绍了如何使用 Python 中的 loc 和 iloc 从 Pandas DataFrame 中过滤数据。

扫一扫阅读全部技术教程

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

最新推荐

教程更新

热门标签

扫码一下
查看教程更方便