Intern
Jak jinak lze řešit problém hledání zaměstnanců starších než vedoucí? (alternativní přístupy)
sobes.tech AI
Odpověď od AI
Pro úlohu hledání zaměstnanců, kteří jsou starší než jejich nadřízení, lze v SQL použít několik alternativních přístupů:
- Self Join (sebe-připojení) — klasický způsob, kdy se tabulka zaměstnanců spojí sama se sebou podle pole nadřízeného, a poté se porovnají data narození:
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;
- Použití okenních funkcí — pokud struktura dat umožňuje, lze použít okenní funkce k získání data narození nadřízeného:
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;
- Poddotazy (subqueries) — lze použít poddotaz k získání data narození nadřízeného:
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
);
- Použití CTE (WITH) — pro zlepšení čitelnosti a opětovné použití dat:
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;
Volba přístupu závisí na objemu dat, schopnostech SGBD a požadavcích na výkon.