Sobes.tech
Intern

Jak jeszcze można rozwiązać problem wyszukiwania pracowników starszych od kierownika? (alternatywne podejścia)

sobes.tech AI

Odpowiedź od AI

Do zadania wyszukiwania pracowników starszych od ich przełożonych można użyć kilku alternatywnych podejść w SQL:

  1. Self Join (samodzielne połączenie) — klasyczny sposób, gdy tabela pracowników jest łączona sama ze sobą po polu przełożonego, a następnie porównywane są daty urodzenia:
SELECT e.employee_id, e.name, e.birth_date, m.name AS manager_name, m.birth_date AS manager_birth_date
FROM employees e
JOIN employees m ON e.manager_id = m.employee_id
WHERE e.birth_date < m.birth_date;
  1. Użycie funkcji okienkowych — jeśli struktura danych na to pozwala, można użyć funkcji okienkowych do uzyskania daty urodzenia przełożonego:
SELECT employee_id, name, birth_date, manager_birth_date
FROM (
  SELECT e.*, 
         MAX(CASE WHEN employee_id = manager_id THEN birth_date END) OVER (PARTITION BY manager_id) AS manager_birth_date
  FROM employees e
) sub
WHERE birth_date < manager_birth_date;
  1. Podzapytania — można użyć podzapytania do uzyskania daty urodzenia przełożonego:
SELECT e.employee_id, e.name, e.birth_date
FROM employees e
WHERE e.birth_date < (
  SELECT m.birth_date FROM employees m WHERE m.employee_id = e.manager_id
);
  1. Użycie CTE (WITH) — dla poprawy czytelności i ponownego użycia danych:
WITH managers AS (
  SELECT employee_id, birth_date FROM employees
)
SELECT e.employee_id, e.name
FROM employees e
JOIN managers m ON e.manager_id = m.employee_id
WHERE e.birth_date < m.birth_date;

Wybór podejścia zależy od objętości danych, możliwości SGBD i wymagań dotyczących wydajności.