21 数据查询:聚合函数
在本章的前一节中,我们探讨了如何使用 JOIN 来关联多个表格的数据。通过连接表,我们可以获取更加丰富的信息,而在聚合分析中,如何总结和统计这些数据变得尤为重要。本节将专注于 PostgreSQL 中的聚合函数及其应用。
什么是聚合函数
聚合函数用于对数据集合进行计算,并返回单一值。常见的聚合函数有:
COUNT():返回行数。SUM():返回数值列的总和。AVG():返回数值列的平均值。MAX():返回数值列的最大值。MIN():返回数值列的最小值。
这些函数在分析和汇总数据时非常有用。
示例数据集
为了更好地学习聚合函数,我们将使用以下示例表格 sales,它包含销售记录:
| id | product_name | quantity | price_per_unit | sale_date |
|---|---|---|---|---|
| 1 | Widget A | 10 | 20.00 | 2023-01-15 |
| 2 | Widget B | 5 | 30.00 | 2023-01-16 |
| 3 | Widget C | 8 | 25.00 | 2023-02-01 |
| 4 | Widget A | 15 | 20.00 | 2023-02-08 |
| 5 | Widget B | 10 | 30.00 | 2023-03-07 |
使用聚合函数
计算总销售量
我们可以使用 SUM() 函数来计算某个产品的总销售量。例如,我们要统计所有产品的销售总量:
SELECT SUM(quantity) AS total_quantity
FROM sales;
执行后,结果将是:
| total_quantity |
|---|
| 48 |
计算销售额
为了计算销售额,我们需要将每个产品的 quantity 与 price_per_unit 相乘,然后再求和。这可以通过结合 SUM() 函数与计算表达式来实现。
SELECT SUM(quantity * price_per_unit) AS total_sales
FROM sales;
结果显示所有销售的总金额:
| total_sales |
|---|
| 1340.00 |
使用其他聚合函数
聚合函数并不止于求和,我们还可以计算平均值、最大值和最小值。例如,计算每种产品的平均售价:
SELECT AVG(price_per_unit) AS average_price
FROM sales;
结果将是各产品的平均售价:
| average_price |
|---|
| 25.00 |
要找出销售历史中的最高销售量记录,可以使用 MAX() 函数:
SELECT MAX(quantity) AS max_quantity
FROM sales;
结果如下:
| max_quantity |
|---|
| 15 |
使用 GROUP BY 进行分组聚合
通常我们会需要按照某个字段进行分组,例如按 product_name 分组统计每种产品的总销售量和总收入。我们可以结合 GROUP BY 子句来实现。
SELECT product_name, SUM(quantity) AS total_quantity, SUM(quantity * price_per_unit) AS total_sales
FROM sales
GROUP BY product_name;
执行此查询后,结果将显示每种产品的总销售量和总销售额:
| product_name | total_quantity | total_sales |
|---|---|---|
| Widget A | 25 | 500.00 |
| Widget B | 15 | 450.00 |
| Widget C | 8 | 200.00 |
结合 HAVING 筛选聚合结果
在某些情况下,我们可能仅对特定条件下的聚合结果感兴趣。HAVING 子句允许我们根据聚合结果进行筛选。例如,我们想找出销售数量大于 10 的产品:
SELECT product_name, SUM(quantity) AS total_quantity
FROM sales
GROUP BY product_name
HAVING SUM(quantity) > 10;
结果可能如下:
| product_name | total_quantity |
|---|---|
| Widget A | 25 |
| Widget B | 15 |
总结
本节我们探讨了 PostgreSQL 中的聚合函数,学习了如何使用 SUM()、AVG()、MAX() 等函数对数据进行汇总和统计。我们还学习了如何结合 GROUP BY 和 HAVING 来进行更复杂的查询。这些技能在数据分析和报告中非常重要。
在下一节中,我们将继续研究数据操作,具体将探讨如何向数据库中插入数据,为后续数据处理打下基础。希望大家能将所学知识灵活应用于实际开发中!
