SQL и Анализ данных
Базы данных и всё, что с ними связано! Сотрудничество: @haarrp РКН № 6766085482
Ko'proq ko'rsatish📈 Telegram kanali SQL и Анализ данных analitikasi
SQL и Анализ данных (@databases_tg) Rus til segmentidagi kanali faol ishtirokchi. Hozirda hamjamiyat 12 558 obunachidan iborat bo'lib, Texnologiyalar & Aralashmalar toifasida 9 991-o'rinni va Rossiya mintaqasida 51 421-o'rinni egallagan.
📊 Auditoriya ko‘rsatkichlari va dinamika
невідомо sanasidan buyon loyiha tez o‘sib, 12 558 obunachiga ega bo‘ldi.
25 Oktabr, 2026 dagi oxirgi ma’lumotlarga ko‘ra kanal barqaror faollikka ega. Oxirgi 30 kunda obunachilar soni 68 ga, so‘nggi 24 soatda esa 1 ga o‘zgardi va umumiy qamrov yuqori darajada qolmoqda.
- Tasdiqlash holati: Tasdiqlanmagan
- Jalb etish (ER): Auditoriya o‘rtacha 12.98% darajada jalb etiladi. Nashrdan keyingi dastlabki 24 soatda kontent odatda umumiy obunachilar sonining 6.73% ini tashkil etuvchi reaksiyalarni to‘playdi.
- Post qamrovi: Har bir post o‘rtacha 1 630 marta ko‘riladi; birinchi sutkada odatda 845 ta ko‘rish yig‘iladi.
- Reaksiyalar va o‘zaro ta’sir: Auditoriya faol: har bir postga o‘rtacha 5 ta reaksiya keladi.
- Tematik yo‘nalishlar: Kontent sql, индекс, user_id, строка, субд kabi asosiy mavzularga jamlangan.
📝 Tavsif va kontent siyosati
Muallif resursni shaxsiy fikrni ifoda etish maydoni sifatida ta’riflaydi:
“Базы данных и всё, что с ними связано!
Сотрудничество: @haarrp
РКН № 6766085482”
Yuqori yangilanish chastotasi (oxirgi ma’lumot 26 Oktabr, 2026 da olingan) sababli kanal doimo dolzarb va katta qamrovli bo‘lib qoladi. Analitika auditoriya kontent bilan faol hamkorlik qilishini, uni Texnologiyalar & Aralashmalar toifasidagi muhim ta’sir nuqtasiga aylantirishini ko‘rsatadi.
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