在SQL中,聚合函数允许我们对一组值执行计算,并返回单个值。这些函数通常用于统计分析,例如,计算平均值、求和、找到最大值和最小值等。当我们需要对数据进行分组统计时,GROUP BY
子句就显得非常有用。在本文中,我们将详细介绍聚合函数和GROUP BY
子句的使用,并通过实例来加深理解。
常用的聚合函数
以下是一些常用的SQL聚合函数:
-
COUNT()
: 计算行数。 -
SUM()
: 计算数值列的总和。 -
AVG()
: 计算数值列的平均值。 -
MAX()
: 找到列中的最大值。 -
MIN()
: 找到列中的最小值。
实例数据表
假设我们有一个名为Sales
的数据表,表中记录了不同店铺的销售数据。
SaleID | Store | Employee | Amount | SaleDate |
---|---|---|---|---|
1 | A | John | 300 | 2023-01-10 |
2 | B | Jane | 150 | 2023-01-11 |
3 | A | Mike | 450 | 2023-01-10 |
4 | C | Anna | 700 | 2023-01-12 |
5 | B | Jane | 250 | 2023-01-13 |
6 | A | John | 200 | 2023-01-14 |
7 | C | Anna | 300 | 2023-01-15 |
创建表脚本
CREATE TABLE Sales (
SaleID INT PRIMARY KEY,
Store CHAR(1),
Employee VARCHAR(50),
Amount DECIMAL(10, 2),
SaleDate DATE
);
插入测试数据
INSERT INTO Sales (SaleID, Store, Employee, Amount, SaleDate) VALUES
(1, 'A', 'John', 300, '2023-01-10'),
(2, 'B', 'Jane', 150, '2023-01-11'),
(3, 'A', 'Mike', 450, '2023-01-10'),
(4, 'C', 'Anna', 700, '2023-01-12'),
(5, 'B', 'Jane', 250, '2023-01-13'),
(6, 'A', 'John', 200, '2023-01-14'),
(7, 'C', 'Anna', 300, '2023-01-15');
使用聚合函数
COUNT()
要计算Sales
表中的总销售记录数:
SELECT COUNT(*) AS TotalSales
FROM Sales;
结果:
TotalSales |
---|
7 |
SUM()
要计算所有店铺的总销售额:
SELECT SUM(Amount) AS TotalAmount
FROM Sales;
结果:
TotalAmount |
---|
2350 |
AVG()
要计算所有店铺的平均销售额:
SELECT AVG(Amount) AS AverageAmount
FROM Sales;
结果:
AverageAmount |
---|
335.714285 |
MAX() 和 MIN()
要找出单笔最大和最小的销售额:
SELECT MAX(Amount) AS MaxSale, MIN(Amount) AS MinSale
FROM Sales;
结果:
MaxSale | MinSale |
---|---|
700 | 150 |
使用GROUP BY子句
GROUP BY
子句通常与聚合函数一起使用,用于将行分组为更小的集合,并对每个组应用聚合函数。
按店铺分组统计销售额
要计算每个店铺的总销售额:
SELECT Store, SUM(Amount) AS TotalAmount
FROM Sales
GROUP BY Store;
结果:
Store | TotalAmount |
---|---|
A | 950.00 |
B | 400.00 |
C | 1000.00 |
按店铺和员工分组统计销售额
要计算每个店铺中每位员工的总销售额:
SELECT Store, Employee, SUM(Amount) AS TotalAmount
FROM Sales
GROUP BY Store, Employee;
结果:
Store | Employee | TotalAmount |
---|---|---|
A | John | 500.00 |
A | Mike | 450.00 |
B | Jane | 400.00 |
C | Anna | 1000.00 |
结合HAVING子句
当我们需要对分组后的结果进行过滤时,可以使用HAVING
子句。HAVING
子句在功能上类似于WHERE
子句,但是它是用于聚合后的结果。
筛选总销售额超过500的店铺
SELECT Store, SUM(Amount) AS TotalAmount
FROM Sales
GROUP BY Store
HAVING SUM(Amount) > 500;
结果:
Store | TotalAmount |
---|---|
A | 950.00 |
C | 1000.00 |
结论
聚合函数和GROUP BY
子句是SQL中非常强大的工具,它们使得对数据集进行统计分析变得简单高效。通过使用聚合函数,我们可以快速得到数据的统计信息,如总和、平均值、最大值和最小值。而GROUP BY
子句则允许我们按照一定的维度对数据进行分组,并对每个分组应用聚合函数。结合HAVING
子句,我们还可以对分组后的结果进行筛选,以满足特定的条件。掌握这些知识点,我们可以更好地从数据中提取有价值的信息。