暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

MySQL 中的 GROUP BY 语句及十二个例子

原创 谭磊Terry 恩墨学院 2022-07-26
2747

在这篇文章中,我们将分享 MySQL 教程如何使用 MySQLGROUP BY函数,以及这个函数在有和没有聚合函数的情况下的用法。

MySQL 中的 GROUP BY 子句是什么意思?

GROUP BY 是最有用的 MySQL 子句之一。它将具有相同值的行分组为汇总行。该子句为每个组返回一行。在查询中,MySQL GROUP BY位于FROM 和 WHERE子句之后,但在HAVING, SELECT, DISTINCT, ORDER BY,LIMIT 子句之前。

image.png

在下面的部分中,我们将使用Orders表中的数据来说明示例。
image.png

MySQL 中的 GROUP BY 语法

MySQL GROUP BY通常与聚合函数 (COUNT(),MAX(),MIN(),SUM(),AVG()) 一起使用,以便按一列或多列对结果进行分组。该子句的基本语法如下:

SELECT expression1, expression2, ... expression_n, 
       aggregate_function (expression)
FROM tables
[WHERE conditions]
GROUP BY expression1, expression2, ... expression_n;

参数:

  • expression1, expression2, … expression_n – 指定包含在聚合函数中但必须添加到的表达式 GROUP BY
  • tables– 列出您要从中检索记录的表。FROM子句中必须至少指定一张表
  • aggregate_function – 指定一个聚合函数
  • WHERE conditions – 可选参数,用于定义要选择的记录的条件

简单的 GROUP BY 示例

下面是一个 GROUP BY 带有 COUNT 聚合函数的 MySQL 示例:

SELECT city, COUNT(product_quantity)
FROM orders     
GROUP BY city;

使用上述语法,我们将知道每个城市的产品数量。
image.png

GROUP BY 和 HAVING 子句

您可以添加 HAVING 到 GROUP BY 语法以查找具有特定条件的行。该 HAVING子句 用于代替WHERE聚合函数。HAVING 总是放在 GROUP BY 之后。

下面的语句返回 id 和总成本小于500的记录:

SELECT id, total_cost
FROM orders
GROUP BY id
HAVING SUM(total_cost) < 500; 

image.png

GROUP BY 与 JOIN

MySQL GROUP BY 可以结合使用 JOIN,以便根据它们之间的相关列对一个或多个表中具有相同值的行进行分组。MySQL中有三种类型的JOINS ,但在本节中,我们将回顾 INNER JOIN。

因此,让我们假设您希望根据 Employees 和 Orders 表之间的匹配值来获取具有相同值的行。然后您可以运行以下查询:

SELECT orders.city, COUNT(*)
FROM employees
             INNER JOIN orders
                        ON employees.city = orders.city
GROUP BY orders.city

GROUP BY 和 WITH ROLLUP 修饰符

使用 WITH ROLLUP 修饰符 with GROUP BY 允许在摘要输出中包含指示更高级别(超级聚合)摘要过程的额外行。例如,如果要检索产品总数并按 id 对它们进行分组,可以运行以下查询:

SELECT id, SUM(product_quantity)
FROM orders
GROUP BY id WITH ROLLUP;

在输出中,您将在最后一行看到总数。

image.png

分组依据和排序依据

MySQL GROUP BY 和 ORDER BY 可以一起使用来对具有相同值的行进行分组,并按升序或降序对结果进行排序。ORDER BY 总是放在 GROUP BY 之后。如果您未在查询中指定顺序,则将应用升序。

下面的查询按城市降序对客户进行分组和排序:

SELECT city, COUNT(*) 
FROM orders 
GROUP BY city 
ORDER BY COUNT(*) DESC;

image.png

具有多列的 GROUP BY

您可以使用 MySQL GROUP BY同时对表中的多个列进行分组。在此示例中,我们将展示如何按city和product_quantity字段分组并计算分组的行数:

SELECT city, product_quantity, COUNT(id) 
FROM orders 
GROUP BY product_quantity, city;

image.png

带有 SUM 函数的 GROUP BY

MySQL SUM 是一个聚合函数,通常用于 GROUP BY 计算值的总和。下面的语句根据它们的 id 返回产品的总成本:

SELECT id, SUM(total_cost) 
FROM orders
GROUP BY id;

image.png

具有 MAX 功能的 GROUP BY

MySQL MAX 结合 GROUP BY 语句检索指定表达式的最大值。使用下面的查询,您可以获得每个城市的产品总成本:

SELECT city, MAX(total_cost)
FROM orders 
GROUP BY city;

image.png

带有 MIN 函数的 GROUP BY

MySQL MIN 函数与 GROUP BY 组合使用,用于搜索指定表达式的最小值。例如,使用下面的语句,您可以获得每个城市的最少产品数量:

SELECT city, MIN(product_quantity)
FROM orders
GROUP BY city;

image.png

GROUP BY 和 DISTINCT 子句

如果语句中没有聚合函数,则使用该 DISTINCT 子句代替。例如,如果您运行这两个查询,您将得到相同的结果:GROUP BYSELECT

SELECT product_quantity, client_name
FROM orders     
GROUP BY product_quantity, client_name;
SELECT DISTINCT product_quantity, client_name
FROM orders;    

两个子句之间的区别在于对 GROUP BY 具有相同值的行进行排序,而DISTINCT 子句不这样做。

如何在 MySQL 中使用 LIMIT 和 GROUP BY

如果您需要设置将在输出中显示的指定行数,则可以使用该 LIMIT 子句。在下面的查询中,我们要计算平均成本并获取前五条记录:

SELECT city, AVG(total_cost) 
FROM orders 
WHERE city IS NOT NULL 
GROUP BY city 
LIMIT 5;

image.png

使用 dbForge 工具进行 MySQL GROUP BY 优化

数据库开发人员每天必须处理许多任务。通常,任务是估计的,有时在一定时间内完成任务是一个挑战。这就是 GUI 工具成为最需要和最有用的地方。正确的 GUI 工具可以节省时间并将您的工作变成一种乐趣。

如果您想减少工作量,但获得最大的结果,您可以尝试 dbForge 产品线中的MySQL GUI 工具。与其他类似工具相比,该工具具有开发、管理和管理 MySQL 和 MariaDB 数据库的高级功能。

您无需具备特定的 SQL 代码知识即可开始使用此 GUI 工具,因为它包含MySQL 查询生成器。使用此生成器,您可以选择要分组的行,指定子句,您将获得准备好的查询:

image.png

image.png

这个 MySQL GUI 工具可以通过格式化查询来大大节省您的工作量。每次键入时,该工具都会建议您使用MySQL 代码片段来完成查询。

image.png

使用 MySQL 的 dbForge GUI 工具,您可以完全专注于编写语句。虽然 MySQL 语法检查器会在查询中发现错误并突出显示它们,以便您能够立即更正它们。因此,您无需浪费时间寻找错字,它会用红色波浪线加下划线。
image.png

此外,您将获得错误的完整描述以了解问题所在:

image.png

结论

在本文中,我们 GROUP BY 通过示例回顾了 MySQL 的使用。如您所见,该语句可以与各种子句组合。对于数据库管理员来说,了解这些子句并能够正确使用它们是非常重要的。这就是一个强大的 MySQL GUI 工具,它不仅可以方便数据库管理员的工作,而且可以成为数据库开发的可靠助手,可以提供很大帮助。如果您需要这样的工具,请下载用于 MySQL 的 dbForge GUI 工具,免费试用 30 天,并尝试其高级功能!

原文标题:GROUP BY Statement in MySQL With Twelve Examples
原文作者:DbForge Team
原文地址:https://blog.devart.com/mysql-group-by-tutorial.html

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论