跳到主要内容

SQL GROUP BY子句

提示

1.GROUP BY子句的功能:在SQL中,GROUP BY子句用于根据一个或多个列将表中的行进行分组,常与聚合函数(如COUNT(), SUM(), MIN(), MAX()等)结合使用。

2.GROUP BY子句的基本用法GROUP BY子句的语法为 SELECT column1, column2, ... FROM table GROUP BY columnA, columnB, ...;,可以基于一个或多个列对表中的行进行分组,并对分组后的每组数据应用聚合函数。

3.JOINHAVING子句的结合使用GROUP BY子句可以与JOIN子句结合使用,用于处理多表数据;同时可以与HAVING子句结合使用,用于对分组后的数据进行条件过滤。

在 SQL 中,GROUP BY 子句用于按一个或多个列对行进行分组。

示例

-- 按 item 列分组

SELECT COUNT(order_id), item
FROM Orders
GROUP BY item;

SQL GROUP BY 语法

SQL GROUP BY 子句的语法是:

SELECT column1, column2, ...
FROM table
GROUP BY columnA, columnB, ...;

这里,

  • column1, column2 ... 是表的列
  • table 是选择行的表的名称
  • columnA, columnB ... 是基于这些列行将被分组的列

例如,

SELECT country, COUNT(*) AS number
FROM Customers
GROUP BY country;

这里,SQL 命令按 country 列对行进行分组,并计算每个国家的数量(因为使用了 COUNT() 函数)。

注意: GROUP BY 子句与 MIN() 和 MAX()SUM() 和 AVG()COUNT() 等聚合函数一起使用。

如何在 SQL 中使用 GROUP BY 子句

由于使用了 AS 别名,编译器在 number 列中显示了 COUNT() 函数的结果。要了解更多,请访问 SQL AS 别名

示例:SQL 中的 GROUP BY

让我们尝试找出每个下过订单的客户总共花费的金额。

-- 按 customer_id 分组结果

SELECT customer_id, SUM(amount) AS total
FROM Orders
GROUP BY customer_id;

这里,SQL 命令在按 customer_id 分组行后求出 amount 的总和。

如何在 SQL 中使用 GROUP BY 子句

SQL 中带有 JOINGROUP BY 子句

我们也可以将 GROUP BY 子句与 JOIN 子句一起使用。例如,

-- 从 Customers 表选择 customer_id 和 first_name
-- 同时从 Orders 表选择 order_id 的计数
-- 按 customer_id 分组结果

SELECT Customers.customer_id, Customers.first_name,
COUNT(Orders.order_id) AS order_count
FROM Customers
LEFT JOIN Orders
ON Customers.customer_id = Orders.customer_id
GROUP BY Customers.customer_id;

这里,SQL 命令连接了 CustomersOrders 表,并按 customer_id(一个客户)分组结果集。

这告诉我们每个客户下的订单数量。

访问 SQL JOIN 以了解更多关于 SQL 中 JOIN 子句的信息。

多列的 GROUP BY

GROUP BY 也可以用于基于多个列对行进行分组。例如,

-- 按国家和州分组

SELECT country, state, MIN(age) AS min_age
FROM Persons
GROUP BY country, state;

这里,SQL 命令将所有具有相同 countrystate 的人进行分组,并给出每组的最小 age

带有 HAVING 子句的 GROUP BY

我们可以将 GROUP BY 子句与 HAVING 子句一起使用,根据聚合函数过滤结果集。例如,

-- 按国家分组,如果计数大于 1

SELECT COUNT(customer_id), country
FROM Customers
GROUP BY country
HAVING COUNT(customer_id) >1;

这里,SQL 命令:

  1. 通过按 country 分组来计算行数
  2. 如果它们的计数大于 1,则返回结果集