Data Science. SQL hub
32.9K subscribers
846 photos
40 videos
36 files
912 links
По всем вопросам- @workakkk

@itchannels_telegram - 🔥лучшие ит-каналы

@ai_machinelearning_big_data - Machine learning

@pythonl - Python

@pythonlbooks- python книги📚

@datascienceiot - ml книги📚

РКН: https://vk.cc/cIi9vo
Download Telegram
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
🖥 Совет SQL

Вы можете использовать CASE для выполнения логики IF-THEN вместе с WHERE, например:

WHERE CASE
WHEN pct_correct >= 70 THEN 'Merit'
WHEN pct_correct >= 50 THEN 'Pass'
ELSE 'Fail'
END <> 'Fail'


#sql #oracle

Подробнее

@sqlhub
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
🖥 Поиск строк в одной таблице, отсутствующих в другой, в Oracle Database с помощью

t1 MINUS t2

Любые дубликаты строк только в T1 исключаются из результатов

В 21c добавлен MINUS ALL, который возвращает избыточные дубликаты.

Также добавлен синоним MINUS - EXCEPT, соответствующий стандарту #SQL

Oператор 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...

@sqlhub
Please open Telegram to view this post
VIEW IN TELEGRAM
🖥 Открытая модель SQL-запросы из естественного языка

На 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
This media is not supported in your browser
VIEW IN TELEGRAM
🖥 Хотите остановить все часть транзакций, наапример, INSERT, UPDATE и DELETE?

Вы можете заблокировать их с помощью:

LOCK TABLE ... IN EXCLUSIVE MODE

Другие транзакции могут обращаться к таблице, пока вы не отмените блокировку.

#oracle #sql

@sqlhub
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
Вы можете присваивать столбцу значение по УМОЛЧАНИЮ при добавлении или изменении строк с помощью ключевого слова DEFAULT



INSERT INTO ... VALUES ( DEFAULT, ... )

UPDATE ... SET ... = DEFAULT


#SQL #ORACLE

@sqlhub
🖥 dbt-core

Громоздкие #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.

В ней, предоставлены основные примеры запросов, а также пояснения к ним на русском языке.

Сохраняйте, чтобы не потерять

#шпаргалка #sql

@sqlhub
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🖥 Полный курс по работе с SQL за 3 часа!

🔥 У этого видео 8 млн просмотров на YouTube, что безусловно говорит о его качестве!

🕞 Продолжительность: 3:16:13

🔗 Ссылка: *клик*

#курс #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
🖥 Курс: MySQL в phpMyAdmin!

🕞 Продолжительность: 1:43:34

🔗 Ссылка: *клик*

#курс #sql

freecourses
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
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
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 пайплайны.​

🔧 Пример использования:

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
✔️ Wal-listener — это инструмент для прослушивания логов транзакций PostgreSQL (WAL) и конвертации их в удобный для обработки формат JSON.

Возможности

- Прослушивание изменений в 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: максимум без агрегатов?

У тебя есть таблица 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-задача с подвохом: "Невидимые дубликаты"

В таблице 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