SQL и Анализ данных
Базы данных и всё, что с ними связано! Сотрудничество: @haarrp РКН № 6766085482
Больше📈 Аналитический обзор Telegram-канала SQL и Анализ данных
Канал SQL и Анализ данных (@databases_tg) языкового сегмента Русский является активным участником. Сейчас сообщество объединяет 12 558 подписчиков, занимая 9 991 место в категории Технологии и приложения и 51 421 место в регионе Россия.
📊 Показатели аудитории и динамика
С момента создания невідомо проект демонстрирует стремительный рост, собрав аудиторию из 12 558 подписчиков.
Согласно последним данным от 25 октября, 2026, канал показывает стабильную активность. За последние 30 дней изменение числа участников составило 68, а за последние 24 часа — 1, при этом общий охват остаётся высоким.
- Статус верификации: Не верифицирован
- Уровень вовлечённости (ER): Средний показатель вовлечённости аудитории составляет 12.98%. В первые 24 часа после публикации контент обычно набирает 6.73% реакций от общего числа подписчиков.
- Охват публикаций: В среднем каждый пост получает 1 630 просмотров. В течение первых суток публикация набирает 845 просмотров.
- Реакции и взаимодействия: Аудитория активно поддерживает контент: среднее количество реакций на один пост — 5.
- Тематические интересы: Контент сосредоточен на ключевых темах, таких как sql, индекс, user_id, строка, субд.
📝 Описание и контентная политика
Автор описывает ресурс как площадку для выражения субъективного мнения:
“Базы данных и всё, что с ними связано!
Сотрудничество: @haarrp
РКН № 6766085482”
Благодаря высокой частоте обновлений (последние данные получены 26 октября, 2026) канал поддерживает актуальность и высокий уровень охвата публикаций. Аналитика показывает, что аудитория активно взаимодействует с контентом, что делает его важной точкой влияния в категории Технологии и приложения.
CREATE TABLE users (user_id INT PRIMARY KEY);
CREATE TABLE orders (order_id INT PRIMARY KEY, buyer_id INT);
INSERT INTO users VALUES (1), (2), (3);
INSERT INTO orders VALUES (101, 1);
SELECT user_id
FROM users
WHERE user_id IN (
SELECT user_id FROM orders
);
Что вернёт запрос? Ошибку, только 1 или всех пользователей?
👇 Разбор
Вернёт 1, 2, 3.
В orders нет user_id, поэтому SQL находит колонку во внешнем запросе. Подзапрос становится коррелированным: для каждого пользователя он возвращает его собственный ID по одному разу на каждую строку orders.
Пока в orders есть строки, условие истинно для каждого пользователя. Если таблица пуста, запрос не вернёт ничего.
Правильный вариант:
SELECT u.user_id
FROM users AS u
WHERE u.user_id IN (
SELECT o.buyer_id
FROM orders AS o
);
💡 Указывайте алиасы таблиц: o.user_id вызвал бы ошибку и сразу выдал опечатку.
#SQLx = 100 возвращает к x = 0. По вертикали действует то же правило.
CREATE TABLE points (
id INT PRIMARY KEY,
x INT,
y INT
);
INSERT INTO points VALUES
(1, 1, 1),
(2, 99, 99),
(3, 50, 50),
(4, 52, 52);
Напишите запрос, который найдёт все пары точек с минимальным расстоянием по прямой с учётом переходов через границы.
Условия:
• точку нельзя сравнивать с собой;
• пары (1, 2) и (2, 1) считаются одной;
• при одинаковом минимуме выведите все пары;
• результат: id1, id2, distance.
Обычная формула расстояния без учёта границ даст неверный ответ 👀UPDATE products SET price = 50500 WHERE id = 1;Этот запрос меняет значение price только у записи с id = 1. С помощью UPDATE можно изменить сразу несколько полей:
UPDATE products SET price = 78500, quantity = 3 WHERE id = 2;Этот запрос обновляет параметры price и quantity у записи с id = 2. 💡 UPDATE используют, когда нужно: ➖ изменить значение в конкретной записи, ➖ обновить несколько полей за один запрос, ➖ выбрать строки по условию, ➖ массово изменить набор записей. 🔗 SQL — это база для работы с базами. Если хотите не просто понять одну команду, а уверенно собирать запросы и менять данные без ошибок, регистрируйтесь на бесплатный мини-курс «MySQL для новичков» от Академии Selectel ➡️ Программа состоит из коротких уроков, которые помогут пройти путь от установки и настройки СУБД до создания таблиц, управления пользователями и основных операций с данными. Реклама. АО "Селектел". erid:2W5zFHzH7Eh
CREATE TABLE transactions (
id int PRIMARY KEY,
user_id int,
ts timestamp,
amount int
);
Нужно найти пользователей, у которых баланс ни разу не становился отрицательным.
Начальный баланс — 0.
Но есть важное условие:
все операции с одинаковым ts происходят одновременно, поэтому порядок строк внутри одного timestamp учитывать нельзя.
Пример:
10:00 +100 11:00 -80 11:00 -30 11:00 +20 12:00 +50В 11:00 изменение баланса должно считаться как:
-80 - 30 + 20 = -90То есть баланс:
10:00 → 100 11:00 → 10 12:00 → 60Наивный вариант:
SUM(amount) OVER (
PARTITION BY user_id
ORDER BY ts
)
может дать неправильную логику, если считать операции с одинаковым ts по отдельности.
Задача: написать SQL-запрос, который сначала объединит операции одного пользователя с одинаковым timestamp, а затем проверит минимальный накопительный баланс.
CREATE TABLE payments (
id int,
amount int
);
INSERT INTO payments VALUES
(1, 100),
(2, 100),
(3, 200);
SELECT
id,
amount,
SUM(amount) OVER (ORDER BY amount) AS total
FROM payments
ORDER BY id;
Многие ожидают:
1 | 100 | 100
2 | 100 | 200
3 | 200 | 400
Но результат будет другим:
1 | 100 | 200
2 | 100 | 200
3 | 200 | 400
По умолчанию PostgreSQL использует окно RANGE ... CURRENT ROW. Строки с одинаковым amount считаются равными соседями и попадают в окно вместе.
Для построчного накопления нужно указать ROWS:
SUM(amount) OVER (
ORDER BY amount, id
ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW
)
#SQL #PostgreSQL #Database