聚合函数group by oracle
时间: 2025-01-06 08:42:33 浏览: 6
### 使用 `GROUP BY` 进行数据聚合
在 Oracle 数据库中,`GROUP BY` 子句用于将具有相同值的行组合在一起。通常与聚合函数一起使用来执行汇总操作,如计算总数、平均值等。
#### 聚合函数的应用
常见的聚合函数包括但不限于:
- **AVG()**: 计算平均值[^4]。
- **SUM()**: 对数值列求和。
- **COUNT()**: 统计记录数量。
- **MAX()**: 获取最大值。
- **MIN()**: 获取最小值。
这些函数可以应用于特定列以获取所需的结果集。
#### 正确编写带有 `GROUP BY` 的查询语句
为了防止出现“不是 GROUP BY 表达式”的错误,在构建 SQL 查询时需注意以下几点:
- 所有的非聚合函数字段应当出现在 `SELECT` 列表以及 `GROUP BY` 子句之中[^1]。
- 避免直接在 `GROUP BY` 中使用别名,而应该重复原始列名称或表达式。
例如,考虑如下表格结构及其上的查询:
| Name | Department_ID |
|-- 错误示范:试图通过别名分组会引发异常
SELECT department_id AS dep, COUNT(*) FROM employees GROUP BY dep;
-- 正确做法:应按照实际列名而非别名来进行分组
SELECT department_id, COUNT(*) FROM employees GROUP BY department_id;
```
#### 结合 `HAVING` 来过滤分组结果
当需要基于某些条件进一步筛选已分组的数据时,则需要用到 `HAVING` 子句而不是 `WHERE`。因为后者无法识别由 `GROUP BY` 创建的新逻辑单元。
```sql
-- 示例:找出至少有两个员工以上的部门编号及人数
SELECT department_id, COUNT(*)
FROM employees
GROUP BY department_id
HAVING COUNT(*) > 1;
```
此外,还可以利用更复杂的 `ROLLUP`, `CUBE` 或者 `GROUPING SETS` 关键字实现多级分类汇总功能[^3]。
阅读全文