Ось готовий урок, створений у стилі CS50, спеціально за твоїм запитом.
🎓 УРОК: Фільтрація, Сортування та Агрегації
(Або: Як знайти голку в копиці даних і перетворити її на статистику)
1. 🔥 Вступ: проблема та мотивація
Уявіть, що ви зайшли до гігантської бібліотеки Конгресу. Там мільйони книг. Але є одна проблема: всі книги скинуті у велику купу посеред кімнати. Жодного алфавітного порядку, жодних жанрів.
Я прошу вас: "Принесіть мені, будь ласка, всі книги про космос, видані після 2000 року, і скажіть, скільки вони важать разом".
Що ви відчуєте? Паніку. Вам доведеться перебрати кожну книгу. Це довго, це дорого, це неефективно.
А тепер уявіть, що у вас є магічний фільтр. Ви клацаєте пальцями — і зникають усі книги, крім тих, що про космос. Клацаєте вдруге — вони шикуються за роком видання. Клацаєте втретє — вони самі стрибають на ваги й показують суму.
В програмуванні та роботі з даними (SQL, Python Pandas, Excel) ми не перебираємо дані вручну. Ми використовуємо Фільтрацію, Сортування та Агрегацію.
Питання до вас: Як ви думаєте, що Netflix робить, коли показує вам "Топ-10 фільмів в Україні"? Він не переглядає історію переглядів кожного користувача в реальному часі вручну. Він робить саме ці три речі.
Без цих навичок ваші дані — це просто сміття. З ними — це інформація.
2. 🧠 Теоретична база (без сухої академічності)
Давайте розберемо це "під капотом". Уявіть, що ваші дані — це таблиця (як в Excel).
1. Фільтрація (Filtering)
Це сито. Ви кажете комп’ютеру: "Я хочу бачити ТІЛЬКИ ті рядки, які відповідають умові X".
* Як це працює: Комп’ютер біжить по кожному рядку і питає: "Ти відповідаєш умові?".
* Якщо ТАК — залишає.
* Якщо НІ — викидає з результату (але не видаляє з бази!).
* Ключове слово в SQL: WHERE
2. Сортування (Sorting)
Це впорядкування. Люди люблять порядок, комп’ютерам байдуже, але нам зручніше читати від А до Я, або від найдешевшого до найдорожчого.
* Як це працює: Комп’ютер порівнює значення. Це затратна операція. Сортувати мільйон записів довше, ніж просто знайти один.
* Ключове слово в SQL: ORDER BY
3. Агрегація (Aggregation)
Це "сплющення" даних. Ви берете 1000 рядків і перетворюєте їх на одне число.
* Наприклад: сума всіх продажів, середня оцінка фільму, кількість користувачів.
* Ви втрачаєте деталі (хто саме купив), але отримуєте загальну картину (скільки заробили).
* Ключові слова: COUNT (кількість), SUM (сума), AVG (середнє), MAX/MIN.
☝️ Що треба запам’ятати залізно: Порядок дій має значення! Спочатку ми фільтруємо (щоб працювати з меншою кількістю даних), а вже потім сортуємо чи агрегуємо. Це економить ресурси процесора.
3. 🧪 Приклади (від простого до реального)
Уявимо, що ми розробники інтернет-магазину кросівок SneakerWorld.
У нас є таблиця orders (замовлення) з колонками: id, model (модель), price (ціна), status (статус).
Приклад 1: Просто подивитись (Фільтрація)
Шеф каже: "Покажи всі замовлення, які вже виконані (completed)".
Що ми очікуємо? Список, де в колонці status всюди написано 'completed'.
SELECT *
FROM orders
WHERE status = 'completed';
Пояснення: Ми взяли "сито" і залишили тільки виконані замовлення. Все просто.
Приклад 2: Навести лад (Сортування)
Шеф каже: "Окей, а тепер покажи мені найдорожчі продані кросівки зверху списку".
Що ми очікуємо? Той самий список, але тепер ціна йде від 5000 грн до 500 грн.
SELECT *
FROM orders
WHERE status = 'completed'
ORDER BY price DESC; -- DESC означає descending (спадання)
Пояснення: Бачите? Ми спочатку відфільтрували (WHERE), а потім те, що лишилося, посортували (ORDER BY).
Приклад 3: Бізнес-аналітика (Агрегація)
Шеф питає: "Скільки грошей ми заробили на моделі 'Air Jordan'?".
Що ми очікуємо? Нам не треба список. Нам треба одне число.
SELECT SUM(price)
FROM orders
WHERE model = 'Air Jordan';
Пояснення:
1. Комп’ютер знайшов усі рядки з 'Air Jordan'.
2. Взяв колонку price з цих рядків.
3. Склав їх разом (SUM).
Вуаля! Ви щойно зробили роботу фінансового аналітика.
4. 🛠 Практична частина
Припустимо, у вас є таблиця users:
name (ім'я), age (вік), city (місто), balance (гроші на рахунку).
Виконай ці завдання (можна подумки або на папері):
- 🔹 Копі-паст: Напиши запит, щоб знайти всіх користувачів із міста "Kyiv".
- 🔹 Зміна умов: Зміни попередній запит так, щоб знайти користувачів з "Kyiv", яким більше 18 років. (Підказка: використовуй
AND). - 🔹 Виправ помилку:
Студент написав код, щоб знайти найбагатшого користувача, але отримав найбіднішого. Що не так?
SELECT * FROM users ORDER BY balance ASC;(ASC — за зростанням). - 🔹 Реальна задача: Маркетологи хочуть дізнатися середній вік наших клієнтів зі Львова. Яку функцію агрегації ти використаєш? (
SUM,COUNTчиAVG?) - 🔹 Міні-кейс: Тобі треба дізнатися, скільки всього користувачів мають нульовий баланс. Напиши логіку цього запиту.
5. 💡 Мислення як у розробника
Послухайте уважно. Новачки часто роблять одну й ту саму помилку: вони намагаються витягнути всі дані на свій комп’ютер і сортувати їх у своїй програмі (наприклад, у циклі на Python чи JS).
❌ Як не треба: Завантажити 1 мільйон замовлень, а потім кодом шукати суму. ✅ Як думає профі: "Нехай база даних зробить брудну роботу". Бази даних оптимізовані для цього роками.
Порада з практики:
Завжди запитуйте себе: "Чи потрібні мені всі ці дані?". Якщо вам треба лише кількість користувачів, не завантажуйте їхні імена та фотографії. Просто попросіть COUNT. Це економить пам'ять, трафік і гроші компанії.
І ще одне: Null. У базах даних порожнє місце — це не нуль і не порожній рядок. Це "ніщо" (NULL). Сортування та агрегація з NULL може дати несподівані результати. Будьте пильні!
6. 🧩 Підсумок
Отже, що ми сьогодні зробили? Ми перетворили хаос на порядок.
- Фільтрація дозволяє фокусуватися на важливому.
- Сортування допомагає бачити пріоритети.
- Агрегація перетворює масив даних на бізнес-показники.
Тепер ви вмієте відповідати на питання "Скільки?", "Хто найкращий?" і "Де наші гроші?".
👀 Тизер наступного уроку: Зараз ми працювали з однією таблицею. Але в реальному житті дані розкидані: користувачі в одній таблиці, а їхні замовлення — в іншій. Як їх з'єднати, щоб дізнатися, хто саме купив ті 'Air Jordan'? На наступному уроці ми поговоримо про магію JOIN (з’єднання таблиць). Це буде легендарно.
До зустрічі! 💻