🧠 Хитрая SQL-задача на собеседование: "Пропущенный день"
Представь таблицу заказов:
🎯 Задача: Найти пользователей, у которых были два заказа, сделанных с пропуском ровно одного дня
(например: 1 мая и 3 мая), но без других заказов между ними.
🛑 Не учитываются пары, где между ними был хоть один заказ.
---
💡 Решение с LEAD() + NOT EXISTS:
🔍 Подвох: многие находят заказы “через день”, но забывают проверить, не было ли чего-то между ними.
Такие задачки отлично проверяют знание оконных функций и аналитического мышления.
Представь таблицу заказов:
orders (
id INT,
user_id INT,
order_date DATE
)🎯 Задача: Найти пользователей, у которых были два заказа, сделанных с пропуском ровно одного дня
(например: 1 мая и 3 мая), но без других заказов между ними.
🛑 Не учитываются пары, где между ними был хоть один заказ.
---
💡 Решение с LEAD() + NOT EXISTS:
WITH ranked_orders AS (
SELECT
user_id,
order_date,
LEAD(order_date) OVER (PARTITION BY user_id ORDER BY order_date) AS next_order
FROM orders
),
valid_pairs AS (
SELECT
user_id
FROM ranked_orders ro
WHERE DATE_DIFF(ro.next_order, ro.order_date, DAY) = 2
AND NOT EXISTS (
SELECT 1 FROM orders o
WHERE o.user_id = ro.user_id
AND o.order_date > ro.order_date
AND o.order_date < ro.next_order
)
)
SELECT DISTINCT user_id FROM valid_pairs;
🔍 Подвох: многие находят заказы “через день”, но забывают проверить, не было ли чего-то между ними.
Такие задачки отлично проверяют знание оконных функций и аналитического мышления.
❤11👍5🔥2
🧠 Продвинутая SQL-задача: "Скользящий максимум с условиями"
Допустим, у вас есть таблица
🎯 Задача:
Для каждой транзакции нужно найти максимальный
- За последние 7 дней, включая текущую
- Только по этому же
- Только по статусу
📥 Ожидаемый вывод:
🧩 Решение:
⚠️ Подводные камни:
- Без индексов по
- Используется подзапрос, а не
- В PostgreSQL стоит учитывать точные границы
🚀 Навыки, которые проверяются:
- Оптимизация временных окон
- Группировка и фильтрация с условиями
- Агрегации по диапазонам
💡 Усложнение:
Хочешь ещё интереснее? Добавь группировку по разным
Допустим, у вас есть таблица
transactions:
CREATE TABLE transactions (
id SERIAL PRIMARY KEY,
user_id INT,
amount NUMERIC,
status TEXT,
created_at TIMESTAMP
);
🎯 Задача:
Для каждой транзакции нужно найти максимальный
amount:- За последние 7 дней, включая текущую
- Только по этому же
user_id - Только по статусу
'confirmed'📥 Ожидаемый вывод:
| id | user_id | amount | created_at | max_amount_last_7d |
|----|---------|--------|--------------------|---------------------|
| 1 | 101 | 100 | 2024-01-01 10:00 | 100 |
| 2 | 101 | 150 | 2024-01-04 12:00 | 150 |
| 3 | 101 | 120 | 2024-01-07 09:00 | 150 |
| 4 | 101 | 90 | 2024-01-15 14:00 | 120 |
🧩 Решение:
SELECT
t1.id,
t1.user_id,
t1.amount,
t1.created_at,
(
SELECT MAX(t2.amount)
FROM transactions t2
WHERE t2.user_id = t1.user_id
AND t2.status = 'confirmed'
AND t2.created_at BETWEEN t1.created_at - INTERVAL '7 days' AND t1.created_at
) AS max_amount_last_7d
FROM transactions t1;
⚠️ Подводные камни:
- Без индексов по
user_id, status, created_at запрос будет тормозить - Используется подзапрос, а не
window function, потому что окно — динамическое - В PostgreSQL стоит учитывать точные границы
BETWEEN при сравнении времени🚀 Навыки, которые проверяются:
- Оптимизация временных окон
- Группировка и фильтрация с условиями
- Агрегации по диапазонам
💡 Усложнение:
Хочешь ещё интереснее? Добавь группировку по разным
status, или перепиши на JOIN с LATERAL.🔥9❤6🥰2😱1
Media is too big
VIEW IN TELEGRAM
SQL за полтора часа в одном видео! Полный базовый курс по SQL. Базы данных курс для начинающих!
00:00:00 Введение
00:02:43 Платные курсы и что изучать дальше
00:04:55 Коротко об онлайн редакторе
00:07:11 Что такое база данных
00:08:10 Что такое CRUD
00:10:05 Запрос на создание первой таблицы
00:11:57 Типы данных у атрибутов(колонок) (DATA TYPES)
00:17:26 Прописываем атрибуты(колонки) первой таблицы
00:21:07 Создаем первую таблицу (CREATE TABLE)
00:21:38 Проверка на наличие таблицы при создании (IF NOT EXISTS)
00:22:18 Запрос на удаление таблицы(DROP TABLE)
00:22:33 Проверка на наличие таблицы при удалении(IF EXISTS)
00:22:57 Запрос на добавление объекта в таблицу (INSER INTO table)
00:23:35 Запрос на чтение(получение) объектов из таблицы(SELECT * FROM table)
00:24:18 Модификаторы для атрибутов(колонок) таблицы(NOT NULL, DEFAULT, UNIQUE)
00:29:26 Изменение уже существующей таблицы(ALTER TABLE, ADD, DROP, RENAME, MODIFY COLUMN)
00:36:08 Удаление объектов из таблицы(DELETE FROM table)
00:37:06 Редактирование объекта в таблице(UPDATE table)
00:39:03 Первичный ключ(PRIMARY KEY)
00:45:37 Композиция в бд
00:50:38 "Иностранный" ключ(FOREIGN KEY)
00:57:26 Индексы в бд(INDEX)
00:59:24 Готовим данные для темы алиас, юнион и слияние таблиц
01:03:30 Слияние таблиц(INNER JOIN)
01:06:02 Слияние таблиц(LEFT JOIN)
01:06:53 Слияние таблиц(RIGHT JOIN)
01:07:26 Слияние таблиц(FULL JOIN/OUTER JOIN) и Union
01:09:04 Алиас(table AS alias)
01:12:18 Select Distinct в SQL
01:13:42 AND OR NOT в SQL
01:16:18 ORDER BY и LIMIT в SQL
01:17:35 MIN и MAX в SQL
01:18:25 COUNT SUM AVG в SQL
01:19:29 LIKE в SQL
01:21:31 IN и BETWEEN в SQL
01:22:50 GROUP BY в SQL
01:25:17 EXISTS в SQL
01:27:37 ANY и SOME в SQL
01:29:00 INSERT INTO в SQL
01:30:40 Отношения в базе данных
01:32:11 Отношения один к одному
01:33:09 Отношения один ко многим
01:34:09 Отношения многие ко многим
01:37:10 Отношения один к одному и один ко многим "через"
01:39:10 SQL инъекции
источник
#devops #девопс
00:00:00 Введение
00:02:43 Платные курсы и что изучать дальше
00:04:55 Коротко об онлайн редакторе
00:07:11 Что такое база данных
00:08:10 Что такое CRUD
00:10:05 Запрос на создание первой таблицы
00:11:57 Типы данных у атрибутов(колонок) (DATA TYPES)
00:17:26 Прописываем атрибуты(колонки) первой таблицы
00:21:07 Создаем первую таблицу (CREATE TABLE)
00:21:38 Проверка на наличие таблицы при создании (IF NOT EXISTS)
00:22:18 Запрос на удаление таблицы(DROP TABLE)
00:22:33 Проверка на наличие таблицы при удалении(IF EXISTS)
00:22:57 Запрос на добавление объекта в таблицу (INSER INTO table)
00:23:35 Запрос на чтение(получение) объектов из таблицы(SELECT * FROM table)
00:24:18 Модификаторы для атрибутов(колонок) таблицы(NOT NULL, DEFAULT, UNIQUE)
00:29:26 Изменение уже существующей таблицы(ALTER TABLE, ADD, DROP, RENAME, MODIFY COLUMN)
00:36:08 Удаление объектов из таблицы(DELETE FROM table)
00:37:06 Редактирование объекта в таблице(UPDATE table)
00:39:03 Первичный ключ(PRIMARY KEY)
00:45:37 Композиция в бд
00:50:38 "Иностранный" ключ(FOREIGN KEY)
00:57:26 Индексы в бд(INDEX)
00:59:24 Готовим данные для темы алиас, юнион и слияние таблиц
01:03:30 Слияние таблиц(INNER JOIN)
01:06:02 Слияние таблиц(LEFT JOIN)
01:06:53 Слияние таблиц(RIGHT JOIN)
01:07:26 Слияние таблиц(FULL JOIN/OUTER JOIN) и Union
01:09:04 Алиас(table AS alias)
01:12:18 Select Distinct в SQL
01:13:42 AND OR NOT в SQL
01:16:18 ORDER BY и LIMIT в SQL
01:17:35 MIN и MAX в SQL
01:18:25 COUNT SUM AVG в SQL
01:19:29 LIKE в SQL
01:21:31 IN и BETWEEN в SQL
01:22:50 GROUP BY в SQL
01:25:17 EXISTS в SQL
01:27:37 ANY и SOME в SQL
01:29:00 INSERT INTO в SQL
01:30:40 Отношения в базе данных
01:32:11 Отношения один к одному
01:33:09 Отношения один ко многим
01:34:09 Отношения многие ко многим
01:37:10 Отношения один к одному и один ко многим "через"
01:39:10 SQL инъекции
источник
#devops #девопс
❤12👍7🔥5💊1
🧠 Oracle SQL — совет для продвинутых: аналитические функции > JOIN + GROUP BY
Если ты всё ещё используешь
🔧 Пример: вместо этого
🔥 Используй:
📌 Что это даёт:
•
•
•
⚡ Аналитические функции в Oracle — это:
• меньше кода
• выше производительность
• идеально для дашбордов, отчётов и сложной аналитики
🧠 Вывод: перестань бороться с GROUP BY — используй
Если ты всё ещё используешь
GROUP BY + подзапросы для расчёта рангов, окон и сумм — переходи на аналитические функции. Они читаются проще, работают быстрее и избавляют от лишних джойнов.🔧 Пример: вместо этого
SELECT department_id, employee_id, salary
FROM (
SELECT department_id, employee_id, salary,
RANK() OVER (PARTITION BY department_id ORDER BY salary DESC) AS rnk
FROM employees
)
WHERE rnk = 1;
🔥 Используй:
SELECT *
FROM (
SELECT e.*, RANK() OVER (PARTITION BY department_id ORDER BY salary DESC) AS rnk
FROM employees e
)
WHERE rnk = 1;
📌 Что это даёт:
•
RANK(), DENSE_RANK(), ROW_NUMBER() — вычисляются без лишнего JOIN •
PARTITION BY делит данные по группам без агрегирования •
OVER (...) даёт гибкость без переписывания логики⚡ Аналитические функции в Oracle — это:
• меньше кода
• выше производительность
• идеально для дашбордов, отчётов и сложной аналитики
🧠 Вывод: перестань бороться с GROUP BY — используй
OVER() и управляй данными как потоком.❤7💊4👀3👍2🔥2
🌐 DeepBI — инновационная платформа для анализа данных с помощью ИИ, которая превращает сложные запросы в простые диалоги. Этот инструмент позволяет исследовать данные из MySQL, PostgreSQL, CSV и других источников, используя естественный язык вместо SQL.
Инструмент умеет генерировать персистентные визуализации и дашборды через чат-интерфейс. Платформа поддерживает мультиязычность (английский/китайский) и работает на Windows, Linux и macOS. Для тестирования доступны Docker-образы и EXE-установщик.
🤖 GitHub
@data_analysis_ml
Инструмент умеет генерировать персистентные визуализации и дашборды через чат-интерфейс. Платформа поддерживает мультиязычность (английский/китайский) и работает на Windows, Linux и macOS. Для тестирования доступны Docker-образы и EXE-установщик.
🤖 GitHub
@data_analysis_ml
❤3👍3🔥2
Forwarded from Machinelearning
🤖 Gemini Robotics выпускает автономный AI для роботов
Google представили Gemini Robotics On-Device — первую модель, объединяющую зрение, язык и действия, которая работает прямо на роботах, без постоянного подключения к интернету.
🔍 Что делает эту модель особенной:
🔹 Объединяет универсальность и точность Gemini, но работает локально
🔹 Моделька справляется со сложными задачами с двумя руками (манипуляции, сборка, перенос)
🔹 Обучается новым действиям всего по 50–100 демкам
Модель уже поддерживает разные типы роботов — от гуманоидов до промышленных двухруких манипуляторов. И это несмотря на то, что изначально она была обучена только на датасете ALOHA под управлением человеческих инструкций.
🛠 В комплекте выходит SDK Gemini Robotics — для разработчиков, которые хотят дообучить модель под свои нужды, включая тесты в физическом симуляторе MuJoCo.
🌐 Полностью автономная работа — идеально для кейсов с плохой связью или требованиями к высокой скорости отклика.
Gemini Robotics продолжает двигаться к будущему, где AI становится частью физического мира.
👉 Подробнее: https://goo.gle/gemini-robotics-on-device
@ai_machinelearning_big_data
#ai #robots #vlm #google #Gemini
Google представили Gemini Robotics On-Device — первую модель, объединяющую зрение, язык и действия, которая работает прямо на роботах, без постоянного подключения к интернету.
🔍 Что делает эту модель особенной:
🔹 Объединяет универсальность и точность Gemini, но работает локально
🔹 Моделька справляется со сложными задачами с двумя руками (манипуляции, сборка, перенос)
🔹 Обучается новым действиям всего по 50–100 демкам
Модель уже поддерживает разные типы роботов — от гуманоидов до промышленных двухруких манипуляторов. И это несмотря на то, что изначально она была обучена только на датасете ALOHA под управлением человеческих инструкций.
🛠 В комплекте выходит SDK Gemini Robotics — для разработчиков, которые хотят дообучить модель под свои нужды, включая тесты в физическом симуляторе MuJoCo.
🌐 Полностью автономная работа — идеально для кейсов с плохой связью или требованиями к высокой скорости отклика.
Gemini Robotics продолжает двигаться к будущему, где AI становится частью физического мира.
👉 Подробнее: https://goo.gle/gemini-robotics-on-device
@ai_machinelearning_big_data
#ai #robots #vlm #google #Gemini
🤨3👍2
💎 Tencent выводит 3D-генерацию на новый уровень с обновлением Hunyuan3D.
Китайский технологический гигант продолжает совершенствовать свою открытую нейросеть для создания трёхмерных объектов. В версии 2.1 модель научилась учитывать физические свойства материалов при рендеринге — теперь свет реалистично преломляется на стекле, отражается от металла и рассеивается на тканях.
Нейросеть работает по принципу двухэтапной генерации: сначала создаются изображения объекта с разных ракурсов, затем они преобразуются в 3D-модель. При этом ии остаётся доступным для широкого круга пользователей, ее базовые функции работают на видеокартах от 10 ГБ памяти.
🔗 Ссылка - *клик*
Китайский технологический гигант продолжает совершенствовать свою открытую нейросеть для создания трёхмерных объектов. В версии 2.1 модель научилась учитывать физические свойства материалов при рендеринге — теперь свет реалистично преломляется на стекле, отражается от металла и рассеивается на тканях.
Нейросеть работает по принципу двухэтапной генерации: сначала создаются изображения объекта с разных ракурсов, затем они преобразуются в 3D-модель. При этом ии остаётся доступным для широкого круга пользователей, ее базовые функции работают на видеокартах от 10 ГБ памяти.
🔗 Ссылка - *клик*
❤6🥱2👍1🔥1🤨1
🧠 SQL-задача для профи: "Ловушка NULL в подзапросе"
Условие:
Есть две таблицы:
✔️ Задание:
Выведите всех сотрудников, которые работают в неактивных отделах.
Если department_id у сотрудника NULL, таких сотрудников выводить не нужно.
❗️Подводный камень:
Решение, которое интуитивно приходит в голову, не работает правильно:
📉 Почему это ошибка:
Если в departments есть хотя бы одна строка, где is_active = true, но id = NULL, то NOT IN (...) будет сравнивать с NULL, а NULL NOT IN (...) всегда возвращает UNKNOWN, то есть — ничего не вернёт.
✅ Правильное решение:
💡 Почему работает:
JOIN отсекает NULL по department_id сразу.
Фильтр по is_active = false работает без ловушек NULL.
Сотрудники без департамента автоматически исключаются.
🔎 Усложнение для профи:
Что произойдёт, если в таблице departments есть id = NULL, is_active = true?
Ответ: ничего — JOIN по NULL никогда не срабатывает. Но если используете NOT EXISTS, нужно быть осторожным.
🧩 Вывод:
Когда дело касается NOT IN и NULL, всегда проверяйте подзапрос. Лучше переходите на JOIN или NOT EXISTS:
📌 Запомни:
NULL ломает IN / NOT IN, но не ломает JOIN / EXISTS.
➡ SQL Community | Чат
Условие:
Есть две таблицы:
CREATE TABLE employees (
id INT PRIMARY KEY,
name TEXT,
department_id INT
);
CREATE TABLE departments (
id INT PRIMARY KEY,
name TEXT,
is_active BOOLEAN
);
Выведите всех сотрудников, которые работают в неактивных отделах.
Если department_id у сотрудника NULL, таких сотрудников выводить не нужно.
❗️Подводный камень:
Решение, которое интуитивно приходит в голову, не работает правильно:
SELECT *
FROM employees
WHERE department_id NOT IN (
SELECT id FROM departments WHERE is_active = true
);
📉 Почему это ошибка:
Если в departments есть хотя бы одна строка, где is_active = true, но id = NULL, то NOT IN (...) будет сравнивать с NULL, а NULL NOT IN (...) всегда возвращает UNKNOWN, то есть — ничего не вернёт.
✅ Правильное решение:
SELECT e.*
FROM employees e
JOIN departments d ON e.department_id = d.id
WHERE d.is_active = false;
💡 Почему работает:
JOIN отсекает NULL по department_id сразу.
Фильтр по is_active = false работает без ловушек NULL.
Сотрудники без департамента автоматически исключаются.
🔎 Усложнение для профи:
Что произойдёт, если в таблице departments есть id = NULL, is_active = true?
Ответ: ничего — JOIN по NULL никогда не срабатывает. Но если используете NOT EXISTS, нужно быть осторожным.
🧩 Вывод:
Когда дело касается NOT IN и NULL, всегда проверяйте подзапрос. Лучше переходите на JOIN или NOT EXISTS:
SELECT e.*
FROM employees e
WHERE EXISTS (
SELECT 1
FROM departments d
WHERE d.id = e.department_id AND d.is_active = false
);
📌 Запомни:
NULL ломает IN / NOT IN, но не ломает JOIN / EXISTS.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍13🔥5❤2
🗄️ MyDumper — параллельный бэкап MySQL без головной боли. Этот инструмент делает логические дампы MySQL в 5-10 раз быстрее стандартного mysqldump за счёт многопоточной работы. Данные сохраняются в отдельных файлах для каждой таблицы, а встроенная поддержка регулярных выражений позволяет гибко выбирать, какие базы или таблицы включать в бэкап.
Разработчики интересно реализовали согласованность данных: инструмент сначала блокирует таблицы глобальным read-lock, затем создаёт транзакционные снимки для каждого потока и только потом отпускает блокировки. Для восстановления есть параллельный загрузчик myloader
🤖 GitHub
Разработчики интересно реализовали согласованность данных: инструмент сначала блокирует таблицы глобальным read-lock, затем создаёт транзакционные снимки для каждого потока и только потом отпускает блокировки. Для восстановления есть параллельный загрузчик myloader
🤖 GitHub
❤6👍2
Прописаны все виды команд JOIN, а также их визуал.
Крайне полезная штука — сохраняем.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍27🔥7❤5🏆1
Media is too big
VIEW IN TELEGRAM
Media is too big
VIEW IN TELEGRAM
Media is too big
VIEW IN TELEGRAM
Media is too big
VIEW IN TELEGRAM
Media is too big
VIEW IN TELEGRAM
Media is too big
VIEW IN TELEGRAM
Media is too big
VIEW IN TELEGRAM
Media is too big
VIEW IN TELEGRAM
Media is too big
VIEW IN TELEGRAM
Media is too big
VIEW IN TELEGRAM
Курс SQL - от новичка до профи
🔹 Регистрация на сайте Oracle
🔹 Что такое SQL? Какие задачи решают Базы Данных?
🔹 Команды SQL: DML, DDL, DCL, TCL
🔹 Агрегатные функции SQL: MIN | MAX | AVG | SUM | COUNT
🔹 Функция GROUP BY. HAVING vs WHERE
🔹INNER JOIN. LEFT JOIN и другие... В ЧЕМ РАЗНИЦА?
🔹Подзапросы SQL Oracle | Вложенные запросы SQL
🔹Агрегатные оконные функции | Аналитические функции sql: min/max/sum/avg/count
🔹Оконные функции SQL | Аналитические функции row_number / dense_ranka
🔹 Регистрация на сайте Oracle
🔹 Что такое SQL? Какие задачи решают Базы Данных?
🔹 Команды SQL: DML, DDL, DCL, TCL
🔹 Агрегатные функции SQL: MIN | MAX | AVG | SUM | COUNT
🔹 Функция GROUP BY. HAVING vs WHERE
🔹INNER JOIN. LEFT JOIN и другие... В ЧЕМ РАЗНИЦА?
🔹Подзапросы SQL Oracle | Вложенные запросы SQL
🔹Агрегатные оконные функции | Аналитические функции sql: min/max/sum/avg/count
🔹Оконные функции SQL | Аналитические функции row_number / dense_ranka
🔥20👍2🥰1🤨1💊1