Рейтинг активности пользователей в SQL!
Пример практического запроса для аналитики: определяем самых активных пользователей по количеству действий.
Создаём таблицу:
Добавляем данные:
Считаем количество действий:
Добавляем ранжирование:
🔥 Простой способ построить лидерборд или отчет по вовлеченности.
➡️ SQL Ready | #практика
Пример практического запроса для аналитики: определяем самых активных пользователей по количеству действий.
Создаём таблицу:
CREATE TABLE actions (
user_id INT,
action_type TEXT
);
Добавляем данные:
INSERT INTO actions VALUES
(1, 'login'), (1, 'purchase'),
(2, 'login'), (2, 'comment'),
(3, 'login');
Считаем количество действий:
SELECT user_id, COUNT(*) AS total_actions
FROM actions
GROUP BY user_id
ORDER BY total_actions DESC;
Добавляем ранжирование:
SELECT
user_id,
COUNT(*) AS total_actions,
RANK() OVER (ORDER BY COUNT(*) DESC) AS rank
FROM actions
GROUP BY user_id;
🔥 Простой способ построить лидерборд или отчет по вовлеченности.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤13👍9🤝6👎1
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍13🔥6❤4🤝3
Многие знают оконные функции, но редко задумываются:
ROWS строит окна по количеству строк, RANGE — по значению (например, времени). Сегодня в посте:
• Как работает ROWS BETWEEN … - окно по строкам.
• Как использовать RANGE BETWEEN INTERVAL … - окно по времени.
• Пример: получаем максимум за последний час в каждом временном срезе.
Этот подход раскрывает глубину SQL как языка временной аналитики и показывает работу с метриками.
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥13❤9👍8
Сегодня будем играть! База данных “задумывает” число от 1 до 10, а ты делаешь три попытки угадать его.
В задаче:
• Используем RANDOM() и FLOOR() для генерации числа;
• Проверяем догадки через CASE WHEN;
• Добавляем счётчик успехов, чтобы узнать, повезло ли на этот раз.
Так SQL превращается в мини-игру с логикой, состоянием и элементом удачи.
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
❤17🔥10👍9
Если таблица огромная, а фильтр почти всегда одинаковый — зачем индексировать всё подряд?
Вместо обычного индекса создаём частичный (partial index):
CREATE INDEX ON orders (user_id)
WHERE status = 'pending';
Так индекс строится только для строк, где
status = 'pending'. Остальные записи не попадают, база хранит меньше, ищет быстрее.Теперь этот запрос:
SELECT * FROM orders
WHERE status = 'pending' AND user_id = 42;
🔥 Применяйте
partial index для активных заказов, незавершённых задач, непрочитанных сообщений. Там, где фильтр стабильно повторяется.Please open Telegram to view this post
VIEW IN TELEGRAM
👍16🤝8🔥7❤1