SQL GROUP BY 子句2025年6月1日 | 阅读 7 分钟 在 SQL 中,GROUP BY 子句用于将结果集中的相似数据分组。它通常与聚合函数如 SUM()、COUNT()、MIN()、MAX()、AVG() 等一起使用。GROUP BY 主要用于当我们想基于特定列(或多列)对行进行分组时。这意味着,如果一列中的不同行具有相同的值,它会将这些行安排成一个组。我们主要使用此子句对表中的行执行计算。 语法描述SELECT: SELECT 语句用于显示数据库中的特定数据。 FROM: 它用于指定我们要从中选择数据的表的名称。 GROUP BY: 这是一个子句,用于根据列上给定的聚合函数对选定的数据进行分组。 aggregate_func: 这是聚合函数的名称,查询将在此函数上执行 SUM()、MIN()、MAX() 等函数。聚合函数用于对数据进行计算并返回单个集合结果。 columnName: 这是表中查询将执行的列的名称。 tableName: 这是用户正在工作和运行查询的表的名称。 GROUP BY 示例现在让我们看一些示例,以便更清楚地理解这个主题。为此,我们将创建一个表,然后在此表上执行一些查询。 首先,我们将在数据库中创建一个名为 customers 的表。现在,让我们使用 CREATE TABLE 语句创建一个表。 现在,让我们使用 INSERT INTO 语句向 customers 表中插入行。 现在让我们检索 customers 表的值。我们将使用 SELECT 语句来获取表。 结果表
现在,我们将对 customers 表应用不同的 SQL 查询,以了解 GROUP BY 子句的用法。 示例 1:按单列 GROUP BY按单列 GROUP BY 用于将具有相同值的行分组到该列中。我们将计算每个国家的总金额,并按国家名称对数据进行分组。 SQL 查询 1 使用上述查询,具有重复国家/地区的行将被归入 country 列,并且它们对应的 amount 将计算为重复行 amount 的总和。 查询输出 The output shows the total amount spent by all customers in each country.
SQL 查询 2 使用上述查询,具有重复 country 的行将被归入单个列,并且 COUNT() 函数将计算每个国家有多少客户。 查询输出 The output displays that each country appears two times in the customers table.
示例 2:按多列 GROUP BYGROUP BY 子句可用于按多个列对行进行分组。当我们要分析列的组合时使用它。在此示例中,我们将选择三列并查找 amount 列的总和,以查看每个唯一组的组合结果。 SQL 查询 在上面的查询中,直接选择了 first_name、last_name 和 age 列,然后按名字、姓氏和年龄的每个唯一组合进行分组。SUM() 函数用于对每个客户的所有 amount 值求和。 查询输出 Each row shows the total amount spent by a specific person with their first name, last name and age.
示例 3:带 WHERE 子句的 GROUP BYWHERE 子句用于在行分组之前过滤行,而 GROUP BY 子句用于对过滤后的行进行分组。如果您想按要求的数据进行分组,则必须首先使用 WHERE 子句对其进行过滤。 语法 描述 WHERE: 这是一个子句,用于在分组之前过滤行。它使用算术运算符、条件运算符等运算符来给出条件。 condition: 用于过滤我们想要分组的数据。 SQL 查询 在上面的查询中,直接选择了 first_name 和 age 列,然后使用 WHERE 子句过滤行,只接收年龄小于 50 的客户。GROUP BY 对过滤后的数据进行分组,SUM(amount) 对每个客户的总花费金额进行求和。 查询输出 Each row shows the total amount of customers younger than 50.
示例 4:带 ORDER BY 子句的 GROUP BY(分组后过滤行)ORDER BY 子句用于在数据分组后对其进行排序。 语法 描述 ORDER BY: 这是一个子句,用于按升序或降序排列数据。默认情况下,它按升序排列行。 ASC: 用于按升序排列行。 DESC: 用于按降序排列行。 SQL 查询 1:按单列排序 上述查询将按 first_name 降序排列行。 查询输出 Each row is arranged in ascending order with the total amount spent by a specific person.
SQL 查询 2:按多列排序 上述查询将按 first_name 升序排列行,并按 age 降序排列行。 查询输出 Each row shows the total amount spent by each person and is sorted by first_name in ascending order and then by age in descending order.
示例 5:带 HAVING 子句的 GROUP BYHAVING 子句可用于在数据分组后对其进行过滤。如果您想从组中检索所需数据,则可以使用 HAVING 子句过滤数据。 语法 描述 HAVING: 这是一个子句,用于在分组后过滤行。它使用算术运算符、条件运算符等运算符来给出条件。 condition: 用于过滤分组后的数据。 SQL 查询 上述查询将首先按国家/地区对数据进行分组,然后 HAVING 子句将过滤分组后的数据,并显示总金额大于 5000 的行。 查询输出 The output shows the grouped countries where the total amount spent by the customers is greater than 5000
示例 6:同时带 WHERE 子句和 HAVING 子句的 GROUP BYGROUP BY 子句可以与 WHERE 子句和 HAVING 子句一起使用。WHERE 子句将在分组前过滤数据,而 HAVING 子句将在分组后过滤数据。 语法 SQL 查询 上述查询将首先选择国家/地区为 India 或 USA 的行,然后按国家/地区对数据进行分组。之后,HAVING 子句过滤掉总金额小于 5000 的行。 查询输出 The output shows only rows with an amount less than 5000.
注意
结论GROUP BY 子句是一个强大的 SQL 语句,用于将指定列中具有相同值的数��进行分组。在此子句中,SELECT 语句可以使用常量、聚合函数、表达式和列名。如果您想有效地解释数据库中的数据,掌握 GROUP BY 子句至关重要。 下一主题SQL 教程 |
我们请求您订阅我们的新闻通讯以获取最新更新。