面试官:分组查询(GROUP BY)会用不?

我是程序汪

共 4636字,需浏览 10分钟

 ·

2024-06-14 10:51


在MySQL中,GROUP BY是一个SQL语句中的子句,用于将查询结果集中的行根据一个或多个列的值进行分组。分组的目的是将具有相同值的行归为一组,这样就可以对每个组应用聚合函数(如SUM, AVG, MAX, MIN, COUNT等)来进行计算,从而实现对各组数据的统计分析


在MySQL中,分组查询(GROUP BY)是一种非常实用的功能,允许你根据一个或多个列将查询结果集划分成多个组,然后可以对每个组应用聚合函数(如SUM, AVG, MAX, MIN, COUNT等)进行计算。下面通过一个具体案例来说明分组查询的使用方法。

具体案例一:

假设我们有一个名为employees的表,存储了公司的员工信息,包括employee_id, name, department_id, salary等字段。现在我们想统计每个部门(department_id)的员工人数和平均薪资。

SQL查询示例

SELECT department_id, COUNT(employee_id) AS total_employees, AVG(salary) AS average_salary
FROM employees
GROUP BY department_id;

解释

  1. SELECT - 首先,我们指定了想要从查询中获取的列。这里我们选择了department_id(分组依据),并使用聚合函数COUNT(employee_id)来计算每个部门的员工总数,以及AVG(salary)来计算每个部门的平均薪资。

  2. FROM employees - 指定查询的表名为employees

  3. GROUP BY department_id - 这是分组查询的关键部分,它指示MySQL根据department_id字段的值对结果集进行分组。这意味着每一组内的记录都有相同的department_id值。

  4. AS关键字 - 用于给聚合函数的计算结果起别名,使得输出结果更易读。例如,COUNT(employee_id) AS total_employees将计数结果显示为total_employees

预期结果

假设employees表中的数据如下:

employee_id name department_id salary
1 Alice 10 5000
2 Bob 10 6000
3 Carol 20 5500
4 David 20 7000
5 Eve 30 4500

执行上面的SQL查询后,预期的结果可能是:

department_id total_employees average_salary
10 2 5500
20 2 6250
30 1 4500

这个结果告诉我们,部门10有2名员工,平均薪资为5500元;部门20也是2名员工,平均薪资略高,为6250元;部门30则只有1名员工,薪资为4500元。通过这个案例,我们可以看到分组查询在数据分析和报表生成中的强大作用。


具体案例二:

当然,让我们通过一个具体的案例来进一步阐述MySQL中GROUP BY子句的使用。设想有一个销售记录表sales_records,包含以下字段:

  • product_id(产品ID)
  • product_name(产品名称)
  • sale_date(销售日期)
  • quantity_sold(销售数量)

我们的目标是统计每个月每个产品的总销售数量。

SQL查询示例

SELECT 
    YEAR(sale_date) AS SaleYear, 
    MONTH(sale_date) AS SaleMonth, 
    product_id, 
    product_name, 
    SUM(quantity_sold) AS TotalQuantitySold
FROM 
    sales_records
GROUP BY 
    YEAR(sale_date), 
    MONTH(sale_date), 
    product_id;

解释

  1. SELECT - 我们选取了年份(通过YEAR(sale_date))、月份(通过MONTH(sale_date))、产品ID(product_id)、产品名称(product_name),以及每个组的销售总量(通过SUM(quantity_sold))。

  2. FROM sales_records - 指定查询的数据来源是sales_records表。

  3. GROUP BY - 使用年份、月份和产品ID作为分组依据。这意味着结果将按照每年每月每个产品的销售记录被分组,每组内包含了相同年月和产品ID的所有记录。

  4. SUM(quantity_sold) - 聚合函数,用于计算每个组内quantity_sold字段的总和,即每个月每个产品的销售总量。

预期结果

假设sales_records表中有如下数据(简化示例):

product_id product_name sale_date quantity_sold
1 Product A 2024-01-10 5
1 Product A 2024-01-15 3
2 Product B 2024-01-12 7
2 Product B 2024-02-01 2
1 Product A 2024-02-05 4

执行上述查询后,可能得到的结果如下:

SaleYear SaleMonth product_id product_name TotalQuantitySold
2024 1 1 Product A 8
2024 1 2 Product B 7
2024 2 2 Product B 2
2024 2 1 Product A 4

这个结果展示了每个产品在每个月的总销售数量,例如2024年1月,Product A总共卖出了8件,而Product B则卖出了7件。这样,通过GROUP BY子句,我们能够轻松地对复杂数据集进行汇总和分析


程序汪接私活项目目录,2023年总结

Java项目分享  最新整理全集,找项目不累啦 07版

程序汪10万接的无线共享充电宝项目,开发周期3个月

程序汪1万接的企业官网项目,开发周期15天

程序汪8万接的共享口罩项目,开发周期1个月

程序汪8万块的饮水机物联网私活项目经验分享

程序汪接的4万智慧餐饮项目

程序汪接的酒店在线开房项目,另外一个好听的名字叫智慧酒店


欢迎添加程序汪个人微信 itwang008  进粉丝群或围观朋友圈

浏览 199
点赞
评论
收藏
分享

手机扫一扫分享

举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

举报