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


在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  进粉丝群或围观朋友圈

相关推荐

  • 苹果接入GPT-4o,Siri史诗级加强背后的语音技术是如何实现的?
  • 如何实现一个合格的分布式锁(典藏版)
  • Vue反编译dist包到源码
  • 只用Tomcat,不用Nginx行不行?
  • TypeChat 入门指南
  • 技术大神云风已从阿里离职
  • 人与人的差距在于认知
  • Spring Boot集成Timefold Solver实现课程表编排
  • 两个 Python 整数之间是如何进行大小比较的?过程并不像我们想的那样简单
  • 23k star超火项目,请求优化写的一塌糊涂!我直接重构!
  • 线程池10连问
  • 吴恩达的新项目,我给加上了国产大模型 API
  • ChatGPT论文写作、数据分析,赠送1个月GPT-4会员账号
  • 唠唠最近的求职行情
  • 某大厂开始“捡漏”35+人员
  • 硕士毕业,要是没进大厂,没进华为,没干研发,是不是就和高工资无缘了?
  • 华为招聘宣讲现场,某同学提问:为什么加班这么多,华为主管回应称:想成世界第一,只能艰苦奋斗
  • 【云原生|K8S系列】StatefulSet特性解读与案例实操
  • 如何全面了解提示技术?马里兰大学等最新76页《提示报告:提示技术》系统综述
  • 视觉语言模型导论:这篇论文能成为你进军VLM的第一步