SQL є універсальною мовою у світі даних і є найважливішою навичкою, яку можна отримати як професіоналу в області даних.
Причина, чому SQL настільки важливий, полягає в тому, що це головна навичка, яка потрібна на етапі обговорення даних. Велика кількість дослідження даних, маніпулювання даними, розробка конвеєра та створення інформаційної панелі здійснюється за допомогою SQL.
Відмінних науковців з даних відрізняє те, що великі науковці даних можуть сперечатися з даними настільки, наскільки дозволяють можливості SQL. Значна частина можливості повноцінного використання всього, що може запропонувати SQL, полягає в тому, щоб знати, як користуватися віконними функціями.
Зважаючи на це, давайте зануритися в це!
1. Дельти з LEAD() і LAG()
LEAD() і LAG() в основному використовуються під час порівняння одного періоду часу з попереднім періодом часу для даної метрики. Наведу кілька прикладів…
- Ви можете отримати дельту між продажами кожного року та продажами попереднього року
- Ви можете отримати дельту в кількості реєстрацій/конверсій/відвідувань веб-сайту щомісяця
- Ви можете порівнювати відтік користувачів щомісяця
приклад:
Наступний запит показує, як ви можете запитати щомісячну відсоткову зміну витрат
with monthly_costs as ( SELECT date , monthlycosts , LEAD(monthlycosts) OVER (ORDER BY date) as previousCosts FROM costs )SELECT date , (monthlycosts - previousCosts) / previousCosts * 100 AS costPercentChange FROM monthly_costs
2. Кумулятивні суми за допомогою SUM() або COUNT()
Розрахунок поточних підсумків можна просто виконати за допомогою функції Windows, яка починається з SUM() або COUNT(). Це потужний інструмент, коли ви хочете показати зростання певного показника з часом. Точніше, це корисно за таких обставин:
- Отримайте загальний дохід і витрати з часом
- Отримайте загальну суму часу, витраченого на додаток для кожного користувача
- Отримайте загальну кількість конверсій за певний час
приклад:
У наведеному нижче прикладі показано, як можна включити стовпець сукупної суми щомісячних витрат:
SELECT date , monthlycosts , SUM(monthlycosts) OVER (ORDER BY date) as cumCosts FROM cost_table
3. Ковзні середні за допомогою AVG()
AVG() дійсно потужний у функціях Windows, оскільки дозволяє обчислювати Ковзаючі середні через деякий час.
Ковзні середні — це простий, але ефективний спосіб прогнозувати значення в короткостроковій перспективі. Вони також надзвичайно корисні для згладжування нестабільних кривих на графіку. Як правило, ковзні середні використовуються для вимірювання загального напрямку руху речей.
Більш конкретно…
- Їх можна використовувати, щоб отримати загальну тенденцію тижневих продажів (чи з часом зростає середній показник?). Це вказує на зростання компанії.
- Їх також можна використовувати, щоб отримати загальну тенденцію щотижневих конверсій або відвідувань веб-сайту.
приклад:
Наведений нижче запит є прикладом отримання 10-денного ковзного середнього для конверсій.
SELECT Date , dailyConversions , AVG(dailyConversions) OVER (ORDER BY Date ROWS 10 PRECEDING) AS 10_dayMovingAverage FROM conversions
4. ROW_NUMBER()
ROW_NUMBER() особливо корисний, коли ви хочете отримати перший або останній запис. Наприклад, якщо у вас є таблиця, коли члени тренажерного залу прийшли до тренажерного залу, і ви хочете отримати дату першого дня, коли вони прийшли до тренажерного залу, ви можете РОЗДІЛИТИ ЗА клієнтом (ім’я/ідентифікатор) і ЗАМОВИТИ ЗА датою покупки. Потім, щоб отримати перший рядок, ви можете просто відфільтрувати рядки з rowNumber, рівним одиниці.
приклад:
У цьому прикладі показано, як ви можете використовувати ROW_NUMBER(), щоб отримати першу дату відвідування кожного члена (користувача).
with numbered_visits as ( SELECT memberId , visitDate , ROW_NUMBER() OVER (PARTITION BY customerId ORDER BY purchaseDate) as rowNumber FROM gym_visits )SELECT * FROM numbered_visits WHERE rowNumber = 1
Нагадаю, якщо вам коли-небудь знадобиться отримати перший або останній запис, ROW_NUMBER() — це чудовий спосіб досягти цього.
5. Рекордний рейтинг із DENSE_RANK()
DENSE_RANK() схожий на ROW_NUMBER(), за винятком того, що повертає той самий ранг для рівних значень. Щільне рейтингування є досить корисним, коли справа доходить до отримання найкращих рекордів, наприклад:
- Якщо ви хочете вибрати 10 найпопулярніших шоу Netflix цього тижня
- Якщо ви хочете отримати 100 найкращих користувачів на основі витрачених доларів
- Якщо ви хочете побачити поведінку 1000 найменш активних користувачів
приклад:
Якщо ви хочете оцінити своїх найпопулярніших клієнтів за загальним обсягом продажів, DENSE_RANK() буде доречною функцією.
SELECT customerId , totalSales , DENSE_RANK() OVER (ORDER BY totalSales DESC) as rank FROM customers
Дякую за читання!
І це все! Я сподіваюся, що це допоможе вам у підготовці до співбесіди — я впевнений, що якщо ви знаєте ці 5 концепцій навиворіт, ви чудово впораєтеся, коли справа доходить до більшості проблем з функцією вікна SQL.
Як завжди, бажаю тобі успіхів у навчанні!
Теренс Шин є ентузіастом даних з 3+-річним досвідом роботи в SQL і 2+-річним досвідом роботи з Python, а також блогером на Towards Data Science і KDnuggets.
Оригінал. Повідомлено з дозволу.
- &
- 100
- 11
- 9
- активний
- ВСІ
- аналітика
- середній
- буття
- КРАЩЕ
- Може отримати
- зміна
- Колонка
- компанія
- витрати
- Клієнти
- приладова панель
- дані
- наука про дані
- вчений даних
- день
- Дельта
- розробка
- доларів
- під час
- Ефективний
- приклад
- досвід
- дослідження
- Перший
- функція
- Функції
- Загальне
- отримання
- буде
- добре
- великий
- Зростання
- гімнастика
- допомагає
- Як
- How To
- HTTPS
- важливо
- інтерв'ю
- інтерв'ю
- IT
- мова
- вивчення
- Маніпуляція
- члени
- більше
- Netflix
- пропонувати
- порядок
- фаза
- Пости
- потужний
- покупка
- Python
- Короткий огляд
- запис
- облік
- Умови повернення
- revenue
- біг
- продажів
- наука
- Вчені
- Короткий
- аналогічний
- простий
- So
- конкретно
- SQL
- через
- час
- інструмент
- топ
- Universal
- користувачі
- веб-сайт
- week
- тижні
- Вікіпедія
- windows
- світ
- б
- років