`GROUP BY` 是 SQL 语言中的一个关键字,主要用于对查询结果进行分组。当你使用 `GROUP BY` 时,你可以根据一个或多个列的值对结果集进行分组,然后对每个分组进行聚合操作,如计算总和、平均值等。
以下是 `GROUP BY` 的基本用法和一些示例:
### 基本语法
```sql
SELECT 列名
FROM 表名
WHERE 条件
GROUP BY 列名或列名的组合
```
### 示例 1:简单的分组计数
假设有一个名为 `employees` 的表,其中有 `department` 列。如果你想查看每个部门的员工数量,你可以这样写:
```sql
SELECT department, COUNT(*) as employee_count
FROM employees
GROUP BY department;
```
### 示例 2:与其他聚合函数一起使用
除了 `COUNT()`,你还可以使用其他聚合函数如 `SUM()`、`AVG()` 等。例如,如果你想计算每个部门的总薪水,可以这样写:
```sql
SELECT department, SUM(salary) as total_salary
FROM employees
GROUP BY department;
```
### 示例 3:结合 `HAVING` 子句进行过滤
当你使用 `GROUP BY` 时,可以结合 `HAVING` 子句对分组后的结果进行过滤。例如,如果你想找到员工数量超过 10 人的部门,可以这样写:
```sql
SELECT department, COUNT(*) as employee_count
FROM employees
GROUP BY department
HAVING employee_count > 10;
```
### 示例 4:多列分组
你也可以根据多列进行分组。例如,如果 `employees` 表中有 `country` 和 `department` 列,并且你想查看每个国家每个部门的员工数量,可以这样写:
```sql
SELECT country, department, COUNT(*) as employee_count
FROM employees
GROUP BY country, department;
```
### 注意点:
* 当使用 `GROUP BY` 时,所有在 `SELECT` 子句中列出的非聚合列都必须包含在 `GROUP BY` 子句中。这是为了确保查询的明确性和准确性。否则,数据库可能会返回错误或不准确的结果。但对于聚合函数来说,这一点不是必需的。这意味着你可以只基于某些列进行分组,然后在选择子句中引用其他未分组的列(这取决于数据库的具体实现)。但在实践中,为了避免混淆和错误,建议始终明确并遵循此规则。