У тебя есть две таблицы:
CREATE TABLE employees (
id SERIAL PRIMARY KEY,
name VARCHAR
);
CREATE TABLE sales (
id SERIAL PRIMARY KEY,
employee_id INT,
sale_amount NUMERIC,
sale_date DATE
);
📌 Задание:
Найди всех сотрудников, у которых не было ни одной продажи в 2024 году.
💣 **Подвох:**
Многие делают
LEFT JOIN sales ON ... WHERE sale.id IS NULL, но это покажет только тех, у кого вообще не было продаж. А нужно — у кого не было продаж именно в 2024 году, даже если они были в 2023 или 2022.
💡 **Подсказки:**
• Отфильтруй
sales по дате (`2024-01-01` до `2024-12-31`) • Используй
LEFT JOIN или NOT EXISTS • Ищи
NULL только после фильтра---
✅ Решение с `LEFT JOIN`:
```sql
SELECT e.name
FROM employees e
LEFT JOIN (
SELECT * FROM sales
WHERE sale_date >= '2024-01-01' AND sale_date < '2025-01-01'
) s ON e.id = s.employee_id
WHERE s.id IS NULL;
```
---
🔄 **Альтернатива с `NOT EXISTS`:**
```sql
SELECT name
FROM employees e
WHERE NOT EXISTS (
SELECT 1
FROM sales s
WHERE s.employee_id = e.id
AND s.sale_date >= '2024-01-01'
AND s.sale_date < '2025-01-01'
);
```
---
🎯 Отличная задача, чтобы понять, **где правильно ставить фильтрацию по дате**, и чем `LEFT JOIN` отличается от `NOT EXISTS`.