Sobes.tech
Intern

Kako drugačije rešiti problem pronalaženja zaposlenih starijih od rukovodioca? (alternativni pristupi)

sobes.tech АИ

Одговор од АИ

Za zadatak pronalaženja zaposlenih koji su stariji od svojih nadređenih, može se koristiti nekoliko alternativnih pristupa u SQL-u:

  1. Self Join (samostalno spajanje) — klasičan način, kada se tabela zaposlenih spoji sama sa sobom po polju nadređenog, a zatim se porede datumi rođenja:
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. Korišćenje funkcija prozora — ako struktura podataka to omogućava, može se koristiti funkcije prozora za dobijanje datuma rođenja nadređenog:
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. Podupiti (subqueries) — može se koristiti podupit za dobijanje datuma rođenja nadređenog:
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. Korišćenje CTE (WITH) — za poboljšanje čitljivosti i ponovnu upotrebu podataka:
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;

Izbor pristupa zavisi od obima podataka, mogućnosti SGBD-a i zahteva za performanse.