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.

#database#advanced-select#join

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';

slackmart blog © 2024