SQL и Анализ данных
Базы данных и всё, что с ними связано! Сотрудничество: @haarrp РКН № 6766085482
Show more📈 Analytical overview of Telegram channel SQL и Анализ данных
Channel SQL и Анализ данных (@databases_tg) in the Russian language segment is an active participant. Currently, the community unites 12 554 subscribers, ranking 10 029 in the Technologies & Applications category and 51 476 in the Russia region.
📊 Audience metrics and dynamics
Since its creation on невідомо, the project has demonstrated rapid growth, gathering an audience of 12 554 subscribers.
According to the latest data from 26 October, 2026, the channel demonstrates stable activity. Although there has been a change in the number of participants by 72 over the last 30 days and by -3 over the last 24 hours, overall reach remains high.
- Verification status: Not verified
- Engagement rate (ER): The average audience engagement rate is 13.08%. Within the first 24 hours after publication, content typically collects 6.73% reactions from the total number of subscribers.
- Post reach: On average, each post receives 1 642 views. Within the first day, a publication typically gains 845 views.
- Reactions and interaction: The audience actively supports content: the average number of reactions per post is 5.
- Thematic interests: Content is focused on key topics such as sql, индекс, user_id, строка, субд.
📝 Description and content policy
The author describes the resource as a platform for expressing subjective opinions:
“Базы данных и всё, что с ними связано!
Сотрудничество: @haarrp
РКН № 6766085482”
Thanks to the high frequency of updates (latest data received on 27 October, 2026), the channel maintains relevance and a high level of publication reach. Analytics show that the audience actively interacts with content, making it an important point of influence in the Technologies & Applications category.
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