mysql 8.0 group by
时间: 2024-12-27 14:18:11 浏览: 4
### MySQL 8.0 中 `GROUP BY` 的用法
在 MySQL 8.0 及更高版本中,`GROUP BY` 子句用于汇总数据并返回分组后的统计信息。此子句通常与聚合函数一起使用,如 `COUNT()`、`SUM()`、`AVG()` 等。
#### 基本语法
```sql
SELECT column1, aggregate_function(column2)
FROM table_name
WHERE condition
GROUP BY column1;
```
#### 使用示例
##### 示例 1: 计算每个部门的员工数量
假设有一个名为 `employees` 的表,其中包含字段 `department_id` 和其他员工信息。要计算每个部门中的员工人数:
```sql
SELECT department_id, COUNT(*) AS employee_count
FROM employees
GROUP BY department_id;
```
这会返回每种 `department_id` 对应的员工总数[^3]。
##### 示例 2: 获取各部门薪资总和
如果想要了解各个部门内所有员工工资总额,则可以执行如下查询语句:
```sql
SELECT department_id, SUM(salary) as total_salary
FROM employees
GROUP BY department_id;
```
上述命令将给出按部门划分的薪水累积值。
#### 结合 HAVING 进行过滤
有时可能希望基于某些条件来筛选特定的结果集,在这种情况下就可以利用 `HAVING` 关键字配合 `GROUP BY` 来实现更复杂的逻辑判断。
例如,找出拥有超过五名成员以上的团队及其平均年龄:
```sql
SELECT team_name, AVG(age), COUNT(*)
FROM teams
GROUP BY team_name
HAVING COUNT(*) > 5;
```
这段 SQL 将展示那些至少有六位队员参与的队伍名称以及它们各自的平均年龄。
#### 排序结果
为了使最终输出更加直观易读,还可以添加 `ORDER BY` 子句对所得记录按照指定列进行升序 (ASC) 或降序 (DESC) 安排顺序。
比如获取销售量最高的前三类产品类别,并按销量高低排列显示:
```sql
SELECT category, SUM(quantity_sold) as sales_volume
FROM products_sales
GROUP BY category
ORDER BY sales_volume DESC
LIMIT 3;
```
该指令先依据商品种类做分类求和运算再依数值大小逆向排序最后仅保留排名最前三位的数据项呈现给用户查看。
阅读全文