Departamento principal de cada empleado
Los empleados pueden pertenecer a varios departamentos. Cuando el empleado se incorpora a otros departamentos, debe decidir cuál es su departamento principal. Tenga en cuenta que cuando un empleado pertenece a un solo departamento, su columna principal es 'N'. Escriba una solución para listar todos los empleados con su departamento principal. En el caso de los empleados que pertenecen a un solo departamento, indique su único departamento. Devuelva la tabla de resultados en cualquier orden.
Tabla: Employee
+---------------+---------+
| Column Name | Type |
+---------------+---------+
| employee_id | int |
| department_id | int |
| primary_flag | varchar |
+---------------+---------+
- (`employee_id`, `department_id`) es la llave primaria (combinación de columnas con valores únicos) para esta tabla.
- `employee_id` es el id del empleado.
- `department_id` es el id del departamento al que pertenece el empleado.
- `primary_flag` es un ENUM (categorÃa) de tipo ('Y', 'N'). Si la bandera es 'Y', el departamento es el principal para el empleado. Si la bandera es 'N', el departamento no es el principal.
El formato del resultado es el del siguiente ejemplo.
Ejemplo 1:
Entrada
Tabla Employee:
+-------------+---------------+--------------+
| employee_id | department_id | primary_flag |
+-------------+---------------+--------------+
| 1 | 1 | N |
| 2 | 1 | Y |
| 2 | 2 | N |
| 3 | 3 | N |
| 4 | 2 | N |
| 4 | 3 | Y |
| 4 | 4 | N |
+-------------+---------------+--------------+
Salida
+-------------+---------------+
| employee_id | department_id |
+-------------+---------------+
| 1 | 1 |
| 2 | 1 |
| 3 | 3 |
| 4 | 3 |
+-------------+---------------+
Explicación:
- El departamento principal para el empleado 1 is 1.
- El departamento principal para el empleado 2 is 1.
- El departamento principal para el empleado 3 is 3.
- El departamento principal para el empleado 4 is 3.
Solución
WITH data as (
SELECT
*,
COUNT(employee_id) OVER(partition by employee_id) AS dc
FROM
employee
)
SELECT
employee_id,
department_id
FROM
data
WHERE
dc = 1
OR primary_flag='Y';