迹忆客 专注技术分享

当前位置:主页 > 学无止境 > 数据库 > MySQL >

MySQL Group by With 计数函数

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

本篇文章将讨论 SQL GROUP BY 子句以及使用 MySQL 的聚合函数。

GROUP BY 子句通常与一些聚合函数一起使用,例如 COUNT()、SUM()、MIN()、MAX() 和 AVG()。


MySQL 中的 GROUP BY 语法

在 MySQL 中,以下语法用于按某些列名称对结果视图进行分组。

SELECT column_name(s)
FROM table_name
WHERE condition
GROUP BY column_name(s);
GROUP BY and Aggregate Functions in MySQL

在 SQL 中,GROUP BY 子句可以与聚合函数一起使用,以根据特定条件对记录数进行计数、求和或聚合。

示例 1:假设我们有一个 ORDERS 表,想要统计按订单日期分组的订单数量。

ORDERS 表

我们可以通过使用以下查询来实现这一点。

SELECT COUNT(OrderID) as Count, OrderDate
FROM Orders
GROUP BY OrderDate;

上面的查询将通过按订单日期对订单进行分组来检索所有订单,并为每个订单日期显示一条记录。 因此,结果视图中的每条记录都将包含 OrderDate 和该日期所有 OrderID 的计数。

查询的输出应为:

按日期排序

示例 2:下面是另一个查找每个员工的总工资的示例。 假设我们使用下表来检索结果。

Employee 表

SELECT e.NAME, SUM(e.SALARY)
FROM Employee e
GROUP BY e.NAME;

在上面的查询中,我们首先从表中选择所有姓名,然后应用 SUM 函数计算每个姓名的薪水总和。 因此,每个名称对应的记录应该只有一条。

查询的输出应如下所示:

按姓名输出总工资组


MySQL 中的 GROUP BY 和 HAVING 子句

HAVING 子句可以与 GROUP BY 子句结合使用,以根据特定条件进一步过滤结果,如以下查询所示。

SELECT e.NAME, SUM(e.SALARY)
FROM Employee e
GROUP BY e.NAME
HAVING SUM(SALARY)>44000;

这个查询和上面一样; 然而,唯一的区别是我们应用了 HAVING 子句来进一步过滤薪水,以仅包括最终薪水总和大于 44000 的记录。

此查询的结果如下所示:

薪水大于 44000 的输出名称


在 MySQL 中对多列进行 GROUP BY Count()

COUNT() 聚合函数可以与具有多列的 GROUP BY 子句一起使用。 在这种情况下,结果首先按第一列分组,然后按下一列分组,以此类推。

之后,所有具有相同分组值的行都被计数并显示为一个。

假设我们要根据下表计算特定客户在特定日期的订单。

Orders 表

我们可以使用以下查询来做到这一点。

Select CustomerId, OrderDate, COUNT(OrderId) as OrdersByCustomerByDate
FROM ORDERS
GROUP BY CustomerId, OrderDate;

所有订单首先按 CustomerId 分组,然后按 OrderDate 分组。 之后,所有那些 CustomerIDs 和 OrderDates 相同的记录都被统计并显示为一条记录,如下面的查询结果所示。

按客户按日期输出订单

$CustomerId = 1$ 的客户有三个订单:一个是 2022 年 7 月 30 日的订单,两个是 2022 年 7 月 31 日的订单。

该客户在 2022 年 7 月 31 日的所有两个订单都汇总在查询结果的第二行,$OrdersByCustomerByDate = 2$。 这同样适用于其余的记录。

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

本文地址:

相关文章

使用 Mysqldump 备份 MySQL 中的数据

发布时间:2023/05/09 浏览次数:192 分类:MySQL

本篇文章将介绍如何使用 mysqldump 只备份数据。 在这里,我们将探讨 --no-create-info 、--compact 、--skip-triggers 和 --no-create-db 选项。

更新 MySQL 表中的主键

发布时间:2023/05/09 浏览次数:61 分类:MySQL

本篇文章介绍如何更新 MySQL 表中的主键。 我们将使用 ALTER 命令对主键进行任何更改。更新 MySQL 表中的主键 我们可以在多种情况下更新 MySQL 表中的主键。

在 MySQL 中获取命令历史记录

发布时间:2023/05/09 浏览次数:150 分类:MySQL

本文重点介绍了在 Windows 和 Linux 中获取我们已执行的 MySQL 命令历史记录的各种方法。MySQL命令历史

Oracle 的 decode 函数在 MySQL 中的等价物

发布时间:2023/05/09 浏览次数:115 分类:MySQL

本篇文章介绍了三种替代实现,我们可以将它们用作 MySQL 中 Oracle 的 decode() 函数的等价物。 为此,我们将使用 IF()、CASE 以及 FIELD() 和 ELT() 的组合。

在 Linux 中安装 MySQL 客户端

发布时间:2023/05/09 浏览次数:72 分类:MySQL

在 Linux 中安装 MySQL 客户端的命令。Linux 和 Unix 等环境作为命令行界面工作,仅在命令的帮助下运行。

在 MySQL 中转换为十进制

发布时间:2023/05/09 浏览次数:150 分类:MySQL

有时,我们可能需要将一种数据类型转换为另一种数据类型。 下面是我们如何使用带有 DECIMAL(M,D) 的 CAST() 和 CONVERT() 函数在 MySQL 中转换为十进制。

在 MySQL 中获取当前日期和时间

发布时间:2023/05/09 浏览次数:145 分类:MySQL

本篇文章我们将学习 NOW()、CURRENT_TIMESTAMP()(也写为 CURRENT_TIMESTAMP)和 SYSDATE() 来获取 MySQL 中的当前日期和时间。 我们还将看到这三个功能之间的比较。在 MySQL 中获取当前日期和时间

更改 MySQL 服务器中的 max_allowed_packet Size

发布时间:2023/05/09 浏览次数:142 分类:MySQL

本篇文章介绍如何更改 MySQL 服务器中的 max_allowed_packet 大小。 为了了解这一点,我们将使用两个操作系统,Windows 10 和 Linux (Ubuntu)。

扫一扫阅读全部技术教程

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

最新推荐

教程更新

热门标签

扫码一下
查看教程更方便