mysql分组统计安工大
时间: 2025-05-16 20:50:22 浏览: 9
### MySQL 中使用 GROUP BY 进行分组统计
在 MySQL 查询中,`GROUP BY` 是一种强大的功能,用于将数据按特定列或表达式进行分组,并配合聚合函数完成统计数据的操作。以下是关于 `GROUP BY` 的具体用法及其与聚合函数的关系:
#### 1. 基本语法结构
`GROUP BY` 子句通常与 `SELECT` 和聚合函数一起使用,其基本语法如下:
```sql
SELECT 列名, 聚合函数(列名)
FROM 表名
WHERE 条件
GROUP BY 列名;
```
此语法表示先通过条件过滤数据,再依据指定的列对结果集进行分组,并应用聚合函数来计算每组的结果。
#### 2. 配合聚合函数使用
常见的聚合函数有 `COUNT()`、`SUM()`、`AVG()`、`MAX()` 和 `MIN()` 等。这些函数可以用来统计每一组的数据特性。例如:
- 统计每个类别的记录数:
```sql
SELECT category, COUNT(*) AS record_count
FROM products
GROUP BY category;
```
- 计算每个部门员工工资总和:
```sql
SELECT department_id, SUM(salary) AS total_salary
FROM employees
GROUP BY department_id;
```
上述例子展示了如何利用 `GROUP BY` 对不同类别或部门的数据进行分类汇总[^1]。
#### 3. 按日期分组统计
当需要基于时间维度分析数据时,可以通过 `DATE_FORMAT` 函数实现更灵活的时间格式化操作。例如,统计每天的订单数量:
```sql
SELECT DATE_FORMAT(order_date, '%Y-%m-%d') AS order_day, COUNT(*) AS daily_orders
FROM orders
WHERE status = 'completed'
GROUP BY DATE_FORMAT(order_date, '%Y-%m-%d');
```
这里使用了 `DATE_FORMAT` 将日期字段转换为所需的格式(如年月日),从而实现了精确到天级别的分组统计[^2]。
#### 4. 添加额外筛选条件 (HAVING)
如果希望进一步限制最终输出的分组结果,则可引入 `HAVING` 子句。注意区别于 `WHERE`,后者作用于原始表而前者针对已形成的分组。
```sql
SELECT customer_id, SUM(amount) AS total_spent
FROM transactions
GROUP BY customer_id
HAVING total_spent > 1000;
```
该查询返回消费总额超过一千元的所有客户信息[^3]。
#### 5. 复杂条件下的分组
对于涉及多个复杂逻辑判断的情况,也可以嵌套其他 SQL 功能来增强灵活性。比如下面这个案例展示了一个复杂的多条件组合场景下如何正确运用 group by 实现目标需求[^4]:
```sql
SELECT JSPXMBM, COUNT(*)
FROM table_name b
WHERE b.jzt=1 AND jdjsprq LIKE '2019%' AND jspwcrq LIKE '2019%'
AND INSTR('db_jz,kn_jz,wb_jz,ls_jz',b.JSPXMBM)>0
GROUP BY JSPXMBM;
```
以上就是有关 mysql 数据库里 group by 关键字的一些基础介绍以及实际应用场景举例说明。
阅读全文
相关推荐

















