跳到主要内容

SQL 分组计算

在SQL中,分组计算是一种强大的功能,允许我们根据某些列对数据进行分组,并对每个组应用聚合函数(如COUNTSUMAVG等)。通过分组计算,我们可以轻松地汇总和分析数据,从而获得有价值的洞察。

什么是分组计算?

分组计算的核心是GROUP BY子句。它允许我们将数据按照一个或多个列进行分组,然后对每个组应用聚合函数。例如,我们可以计算每个部门的平均工资,或者统计每个地区的销售总额。

备注

GROUP BY通常与聚合函数一起使用,例如COUNTSUMAVGMINMAX

基本语法

以下是GROUP BY的基本语法:

sql
SELECT column1, aggregate_function(column2)
FROM table_name
GROUP BY column1;
  • column1:用于分组的列。
  • aggregate_function(column2):对每个组应用的聚合函数。
  • table_name:数据来源的表。

示例:按部门计算平均工资

假设我们有一个名为employees的表,其中包含员工的姓名、部门和工资信息。我们希望计算每个部门的平均工资。

sql
SELECT department, AVG(salary) AS avg_salary
FROM employees
GROUP BY department;

输入数据:

namedepartmentsalary
AliceHR50000
BobIT60000
CharlieHR55000
DavidIT65000
EveFinance70000

输出结果:

departmentavg_salary
HR52500
IT62500
Finance70000

多列分组

我们还可以根据多个列进行分组。例如,假设我们想要计算每个部门中每个职位的平均工资。

sql
SELECT department, position, AVG(salary) AS avg_salary
FROM employees
GROUP BY department, position;

输入数据:

namedepartmentpositionsalary
AliceHRManager50000
BobITEngineer60000
CharlieHRAnalyst55000
DavidITEngineer65000
EveFinanceManager70000

输出结果:

departmentpositionavg_salary
HRManager50000
HRAnalyst55000
ITEngineer62500
FinanceManager70000

使用HAVING子句过滤分组

HAVING子句用于过滤分组后的结果。与WHERE子句不同,HAVING是在分组和聚合之后应用的。

例如,我们只想显示平均工资大于60000的部门:

sql
SELECT department, AVG(salary) AS avg_salary
FROM employees
GROUP BY department
HAVING AVG(salary) > 60000;

输出结果:

departmentavg_salary
IT62500
Finance70000

实际应用场景

场景1:电商网站的销售分析

假设我们有一个orders表,记录了每个订单的客户ID、订单日期和订单金额。我们希望计算每个客户的年度总消费金额。

sql
SELECT customer_id, YEAR(order_date) AS order_year, SUM(order_amount) AS total_spent
FROM orders
GROUP BY customer_id, YEAR(order_date);

场景2:学校的学生成绩统计

假设我们有一个scores表,记录了每个学生的科目和成绩。我们希望计算每个科目的平均成绩。

sql
SELECT subject, AVG(score) AS avg_score
FROM scores
GROUP BY subject;

总结

SQL的分组计算功能使我们能够轻松地对数据进行汇总和分析。通过GROUP BY子句和聚合函数,我们可以按需分组并计算各种统计指标。HAVING子句则进一步允许我们对分组结果进行过滤。

提示

在实际应用中,分组计算常用于生成报表、分析趋势和识别模式。掌握这一功能将大大提升你的数据分析能力。

附加资源与练习

  1. 练习1:在一个包含学生信息的表中,计算每个班级的平均年龄。
  2. 练习2:在一个销售记录表中,计算每个销售员的月度销售总额。
  3. 进一步学习:探索SQL中的窗口函数,了解如何在分组计算的基础上进行更复杂的分析。

通过不断练习和应用,你将能够熟练使用SQL的分组计算功能,为你的数据分析工作提供强大的支持。