This media is not supported in your browser
VIEW IN TELEGRAM
#XML
в строки и столбцы в Oracle #SQL
с помощьюXMLTABLE ( '/path/to/elements' PASSING <xml> COLUMNS ... )
Команда генерирует строку для каждого элемента, на который ссылается путь.
COLUMNS
определяет путь к элементам и атрибутам, находящимся в этом пункте.@sqlhub
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
t1 MINUS t2
Любые дубликаты строк только в
T1
исключаются из результатовВ 21c добавлен
MINUS ALL
, который возвращает избыточные дубликаты.Также добавлен синоним
MINUS
- EXCEPT
, соответствующий стандарту #SQLOператор
MINUS
используется для возврата всех строк первого запроса SELECT
, не возвращаемых вторым SELECT
. @sqlhub
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
Чтобы получить его в единицах измерения (например, часах или секундах) в Oracle #SQL
Сначала вы извлекаете необходимый интервал времени, затем преобразовываете его в целевую единицу (час/секунду и тд).
например:
EXTRACT ( DAY FROM diff ) * 24 ) +
EXTRACT ( HOUR FROM diff ) +
EXTRACT ( MINUTE FROM diff ) / 60...
@sqlhubPlease open Telegram to view this post
VIEW IN TELEGRAM
На HuggingFace вышла модель Text-to-SQL на 6.91 млрд. параметров.
Модель позволяет превращать обычный текстовый запрос к БД в SQL-выражение:
Вопрос: Выведи день, когда пришло больше всего пользователей
Ответ:
SELECT created_at::DATE AS day, COUNT(*) AS user_count
FROM users
GROUP BY day
ORDER BY user_count DESC
LIMIT 1;
Код:
import torch
from transformers import AutoModelForCausalLM, AutoTokenizer
tokenizer = AutoTokenizer.from_pretrained("chatdb/natural-sql-7b")
model = AutoModelForCausalLM.from_pretrained(
"chatdb/natural-sql-7b",
device_map="auto",
torch_dtype=torch.float16,
)
#sql #llm@sqlhub
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
В статье показано, как с помощью matching в Oracle #SQL найти серию последовательных строк с начальной даты и до конечной:
MATCH_RECOGNIZE (
...
PATTERN (str e+)
DEFINE e AS start_date = PREV(end_date) + 1 --start is 1 day after previous end
)
https://how2ora-en.blogspot.com/2023/01/how-to-check-if-row-is-continuation-of.html@sqlhub
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
Громоздкие #SQL запросы трудно читать, понимать и поддерживать.
С помощью dbt вы можете использовать функцию
ref
, чтобы разбить длинный SQL-запросы на более мелкие компоненты, делая их более читаемыми и удобными для обслуживания.
-- models/total_order_amount.sql
SELECT
order_id,
customer_id,
SUM(order_amount) AS total_amount
FROM
raw_orders
GROUP BY order_id, customer_id
models/average_order_amount.sql:
-- models/average_order_amount.sql
SELECT
customer_id,
AVG(total_amount) AS avg_amount
FROM {{ ref('total_order_amount') }}
GROUP BY customer_id
▪ Github
@data_analysis_ml
Please open Telegram to view this post
VIEW IN TELEGRAM
В ней, предоставлены основные примеры запросов, а также пояснения к ним на русском языке.
Сохраняйте, чтобы не потерять
#шпаргалка #sql
@sqlhub
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
#курс #sql #datascience
@sqlhub
Please open Telegram to view this post
VIEW IN TELEGRAM
Реляционные базы данных представляют собой базы данных, которые используются для хранения и предоставления доступа к взаимосвязанным элементам информации. Реляционные базы данных основаны на реляционной модели — интуитивно понятном, наглядном табличном способе представления данных. Каждая строка, содержащая в таблице такой базы данных, представляет собой запись с уникальным идентификатором, который называют ключом. Столбцы таблицы имеют атрибуты данных, а каждая запись обычно содержит значение для каждого атрибута, что дает возможность легко устанавливать взаимосвязь между элементами данных.
Таблицы в такой базе данных также соотносятся друг с другом строго определенным образом. Реляционные базы данных используют целый комплекс инструментов, которые обеспечивают целостность данных, т. е. их точность, полноту и единообразие.
На картинке представлены ключевые моменты, которые следует знать о проектировании реляционных баз данных.
#азы #sql
@sqlhub
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from Machinelearning
🦑 SQL Squid Game: 9 уровней. 1 Аналитик данных. Ваша жизнь на кону 🔫.
Развлечение на выходные - Игра в Кальмара с SQL. Это бесплатный образовательный тренажер по работе с БД, по мотивам Netflix's Squid Game, SQL Murder Mystery и других известных SQL-игр.
❓О чем игра?
Вы только что были приняты на работу в качестве Аналитика данных в загадочную организацию Squid Game.
Таинственный работодатель, управляющий игрой, пообещал вам полностью удаленную работу, на которой вы будете составлять промпты, работать с pandas и генеративным ИИ
Но, как это обычно бывает в индустрии данных, вас подставили и обманули.
Оказалось, что работа связана с аналитикой данных на SQL, а работа не полностью удаленная, а гибридная: 5 дней в офисе, а 2 дня удаленно.
Не успели вы отказаться от работы , как работодатель приставил к вашей голове пистолет и начал требовать ответов на различные бизнес-вопросы.
Вы должны написать SQL-запросы, чтобы ответить ему - иначе вас ждет печальный конец 💀
📌 Как играть
- На каждом уровне вам будут даны задачи, а также одна или несколько таблиц и их схема.
Вам будет дана ячейка решения, в которую вы должны будете записать свое решение и отправить его на проверку.
Каждый уровень становится сложнее.
PS: Для прохождения SQL Squid Games, вам нужно хорошо знать SQL.А если хотите освежить свои знания или выучить SQL с нуля, вот 33 интерактивных учебника от Datalemur авторов игры из которых вы узнаете все, что нужно знать, чтобы пройти игру.
📲 Начать игру
@ai_machinelearning_big_data
#sql #tutorial #educationalgame
Развлечение на выходные - Игра в Кальмара с SQL. Это бесплатный образовательный тренажер по работе с БД, по мотивам Netflix's Squid Game, SQL Murder Mystery и других известных SQL-игр.
❓О чем игра?
Вы только что были приняты на работу в качестве Аналитика данных в загадочную организацию Squid Game.
Таинственный работодатель, управляющий игрой, пообещал вам полностью удаленную работу, на которой вы будете составлять промпты, работать с pandas и генеративным ИИ
Но, как это обычно бывает в индустрии данных, вас подставили и обманули.
Оказалось, что работа связана с аналитикой данных на SQL, а работа не полностью удаленная, а гибридная: 5 дней в офисе, а 2 дня удаленно.
Не успели вы отказаться от работы , как работодатель приставил к вашей голове пистолет и начал требовать ответов на различные бизнес-вопросы.
Вы должны написать SQL-запросы, чтобы ответить ему - иначе вас ждет печальный конец 💀
📌 Как играть
- На каждом уровне вам будут даны задачи, а также одна или несколько таблиц и их схема.
Вам будет дана ячейка решения, в которую вы должны будете записать свое решение и отправить его на проверку.
Каждый уровень становится сложнее.
PS: Для прохождения SQL Squid Games, вам нужно хорошо знать SQL.А если хотите освежить свои знания или выучить SQL с нуля, вот 33 интерактивных учебника от Datalemur авторов игры из которых вы узнаете все, что нужно знать, чтобы пройти игру.
📲 Начать игру
@ai_machinelearning_big_data
#sql #tutorial #educationalgame
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 инъекции
📌 источник
#sql #lectures #junior
@sqlhub
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 инъекции
📌 источник
#sql #lectures #junior
@sqlhub
This media is not supported in your browser
VIEW IN TELEGRAM
В мире разработки выбор БД — ключ к производительности, масштабируемости и эффективности. Это не просто SQL vs NoSQL, а поиск инструмента под данные, нагрузку и цели бизнеса. От IoT до ИИ — тип не важен, важна задача. Разбираем:
➡️ SQL
💬 Структурированность, ACID, надёжность.
📦 Для: финансы, CRM, ERP.
📌 Примеры: MySQL, PostgreSQL.
➡️ NoSQL
💬 Document DB: JSON/XML (MongoDB, Couchbase).
🔑 Key-Value: быстрый доступ (Redis, DynamoDB).
📊 Columnar: аналитика (Cassandra, Redshift).
🔗 Graph DB: связи (Neo4j, Cosmos DB).
➡️ Специализированные
📍 Time-Series: метрики, IoT (InfluxDB, TimescaleDB).
📍 Vector DB: ИИ, поиск (Milvus, Pinecone).
📍 Spatial DB: карты (PostGIS, Oracle Spatial).
➡️ Высокая производительность
⚡️ In-Memory: скорость (SAP HANA, MemSQL).
🧱 NewSQL: масштаб + SQL (Spanner, CockroachDB).
➡️ Нишевые
🧬 Blockchain DB: доверие (BigchainDB).
📦 Object-Oriented: кодовая структура (ObjectDB).
🎯 БД — это про масштабируемость, интеллект и гибкость. Выбирайте под задачу, а не по привычке.
#sql #nosql #db
@sqlhub
Please open Telegram to view this post
VIEW IN TELEGRAM
🚀 Релиз: SQL Formatting Preview в T-SQL Analyzer CLI
В последнем обновлении инструмента T-SQL Analyzer CLI от ErikEJ появилась функция предварительного просмотра форматирования SQL-кода.
✨ Основные возможности:
Автоматическое форматирование T-SQL скриптов с использованием встроенных правил.
Интеграция с анализатором кода, позволяющая одновременно проверять и форматировать скрипты.
Поддержка командной строки, что удобно для автоматизации процессов и интеграции в CI/CD пайплайны.
🔧 Пример использования:
Эта команда проанализирует и отформатирует указанный SQL-скрипт согласно установленным правилам.
📌 Подробнее о новых возможностях и инструкциях по установке читайте в официальной документации.
#sqlserver #tsql #dotnet #cli #devtools
https://github.com/ErikEJ/SqlServer.Rules/tree/master/tools/SqlAnalyzerCli#sql-formatting-preview
@sqlhub
В последнем обновлении инструмента T-SQL Analyzer CLI от ErikEJ появилась функция предварительного просмотра форматирования SQL-кода.
✨ Основные возможности:
Автоматическое форматирование T-SQL скриптов с использованием встроенных правил.
Интеграция с анализатором кода, позволяющая одновременно проверять и форматировать скрипты.
Поддержка командной строки, что удобно для автоматизации процессов и интеграции в CI/CD пайплайны.
🔧 Пример использования:
tsqlanalyze -i "C:\scripts\proc.sql" --format
Эта команда проанализирует и отформатирует указанный SQL-скрипт согласно установленным правилам.
📌 Подробнее о новых возможностях и инструкциях по установке читайте в официальной документации.
#sqlserver #tsql #dotnet #cli #devtools
https://github.com/ErikEJ/SqlServer.Rules/tree/master/tools/SqlAnalyzerCli#sql-formatting-preview
@sqlhub
Возможности
- Прослушивание изменений в PostgreSQL в режиме реального времени.
- Поддержка нескольких слотов репликации.
- Удобный вывод в формате JSON.
- Готов к использованию в качестве сервиса.
Пример использования
1. Создаём слот репликации:
SELECT * FROM pg_create_logical_replication_slot('test_slot', 'wal2json');
2. Запускаем wal-listener:
wal-listener --dsn "host=localhost port=5432 user=postgres dbname=test" --slot test_slot
3. Получаем JSON-объекты при изменениях в базе данных.
https://github.com/ihippik/wal-listener
#devops #девопс #PostgreSQL #sql
@sqlhub
Please open Telegram to view this post
VIEW IN TELEGRAM
🧠 Хитрая задача по SQL: максимум без агрегатов?
У тебя есть таблица
📌 Задача:
Для каждого клиента (`customer_id`) найти наиболее поздний заказ (по
🔥 Уловка:
💡 Подумай:
Как ты решишь эту задачу только с
📥 Ожидаемый результат:
```
🧩 Подсказка:
Можно использовать
📎 Такой приём полезен:
• Когда нельзя использовать оконные функции
• Когда ты работаешь на старых версиях СУБД
• Когда нужна универсальность между MySQL / Oracle / SQLite
#SQL #Задача #БазыДанных #DataEngineering #Оптимизация
@sqlhub
У тебя есть таблица
orders
со следующими полями:
orders(id, customer_id, order_date, amount)
📌 Задача:
Для каждого клиента (`customer_id`) найти наиболее поздний заказ (по
order_date`), **не используя `GROUP BY
и `MAX()`**.🔥 Уловка:
DISTINCT ON
, TOP 1 WITH TIES
и RANK()
нельзя — ты ограничен базовым SQL, работающим на большинстве СУБД.💡 Подумай:
Как ты решишь эту задачу только с
JOIN
, WHERE
и EXISTS
?📥 Ожидаемый результат:
```sql
customer_id | order_id | order_date | amount
------------|----------|------------|--------
1001 | 87 | 2024-12-01 | 320.00
1002 | 91 | 2024-12-05 | 175.00
...
```
🧩 Подсказка:
Можно использовать
NOT EXISTS
, чтобы выбрать заказы, у которых нет более новых у того же клиента.
SELECT o.*
FROM orders o
WHERE NOT EXISTS (
SELECT 1
FROM orders o2
WHERE o2.customer_id = o.customer_id
AND o2.order_date > o.order_date
)
📎 Такой приём полезен:
• Когда нельзя использовать оконные функции
• Когда ты работаешь на старых версиях СУБД
• Когда нужна универсальность между MySQL / Oracle / SQLite
#SQL #Задача #БазыДанных #DataEngineering #Оптимизация
@sqlhub
🧠 SQL-задача с подвохом: "Невидимые дубликаты"
В таблице
🎯 Цель:
Найти количество уникальных пользователей, если:
- Регистр не учитывается (`alice` = `ALICE`)
- Пробелы игнорируются
- Для
— Убираются точки в имени
— Всё после
✅ SQL-решение:
🔍 Как это работает:
LOWER(TRIM(email)) — убираем пробелы и регистр
SPLIT_PART(..., '+', 1) — отрезаем всё после +
REGEXP_REPLACE(..., '\.', '', 'g') — удаляем точки
Считаем DISTINCT, чтобы получить число уникальных email'ов
🔥 Используй такие трюки для:
• антифрода
• чистки базы
• аналитики поведения пользователей
#SQL #PostgreSQL #Gmail #EmailNormalization #DevTools #AntiFraud #DataCleaning #Analytics
В таблице
users
хранятся email-адреса пользователей. Некоторые юзеры регистрируются повторно, маскируя один и тот же email по-разному:| id | name | email |
|----|----------|--------------------------|
| 1 | Alice | alice@example.com |
| 2 | Bob | ALICE@EXAMPLE.COM |
| 3 | Charlie | alice@example.com |
| 4 | Dave | alice+promo@example.com |
| 5 | Eve | a.l.i.c.e@example.com |
🎯 Цель:
Найти количество уникальных пользователей, если:
- Регистр не учитывается (`alice` = `ALICE`)
- Пробелы игнорируются
- Для
@gmail.com
: — Убираются точки в имени
— Всё после
+
отрезается✅ SQL-решение:
SELECT COUNT(DISTINCT normalized_email) AS unique_users
FROM (
SELECT
CASE
WHEN email ILIKE '%@gmail.com' THEN
REGEXP_REPLACE(
SPLIT_PART(SPLIT_PART(LOWER(TRIM(email)), '+', 1), '@', 1),
'\.', '', 'g'
) || '@gmail.com'
ELSE
LOWER(REPLACE(TRIM(email), ' ', ''))
END AS normalized_email
FROM users
) AS cleaned;
🔍 Как это работает:
LOWER(TRIM(email)) — убираем пробелы и регистр
SPLIT_PART(..., '+', 1) — отрезаем всё после +
REGEXP_REPLACE(..., '\.', '', 'g') — удаляем точки
Считаем DISTINCT, чтобы получить число уникальных email'ов
🔥 Используй такие трюки для:
• антифрода
• чистки базы
• аналитики поведения пользователей
#SQL #PostgreSQL #Gmail #EmailNormalization #DevTools #AntiFraud #DataCleaning #Analytics