oracle如何写下面一个查询语句?查找出每个部门每个工资等级的人数,(没有人数的显示为0),显示部门名称,工资等级和人数
时间: 2024-09-24 20:19:48 浏览: 28
oracle查询语句大全(oracle 基本命令大全一)
在Oracle数据库中,你可以使用SQL的`COUNT()`函数结合`GROUP BY`子句来完成这个查询。假设有一个名为`employees`的表,包含`department_id`, `salary_level`和`employee_id`字段,可以按照以下方式进行编写:
```sql
SELECT department_name, salary_level,
COUNT(employee_id) OVER (PARTITION BY department_id, salary_level) AS count
FROM employees
LEFT JOIN (
SELECT DISTINCT department_id, salary_level
FROM employees
) subquery ON employees.department_id = subquery.department_id AND employees.salary_level = subquery.salary_level
```
这里做了两步操作:
1. 使用`INNER JOIN`或`LEFT JOIN`(在这里选择LEFT JOIN以防有些部门或工资等级下没有人)员工表(`employees`)到一个只包含部门ID和工资等级的子查询(`subquery`),确保每个组合都有对应的行。
2. 对每个`department_id`和`salary_level`组,使用窗口函数`COUNT()`计算`employee_id`的数量。
如果某个部门或工资等级没有数据,`COUNT(employee_id)`将返回0,因为LEFT JOIN会保留所有左表的行。
阅读全文