Data Science. SQL hub
35.9K subscribers
1.15K photos
94 videos
37 files
1.16K links
По всем вопросам- @workakkk

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

@ai_machinelearning_big_data - Machine learning

@pythonl - Python

@pythonlbooks- python книги📚

@datascienceiot - ml книги📚

РКН: https://vk.cc/cIi9vo

#VRHSZ
Download 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
👍95🔥4👎1
📊 Из PDF в DataFrame за пару строк кода

Работаете с финансовыми отчётами или любыми табличными данными в PDF?
С библиотекой docling это становится максимально просто.

Большинство инструментов для работы с PDF заставляют собирать пайплайн вручную:
одна библиотека для извлечения текста, другая для парсинга, третья для чанкинга.

Docling закрывает весь процесс — от сырых PDF до структурированных и готовых к поиску данных — в одном решении.

📌 Преимущества Docling:
🔹 Поддержка PDF, DOCX, PPTX, HTML и изображений
🔹 AI-модель TableFormer для понимания сложных таблиц
🔹 Vision-модели для OCR и image-to-text
🔹 Простой экспорт в pandas DataFrame, JSON и Markdown

Пример: конвертируем PDF с отчётом о доходах и сразу получаем pandas DataFrame 👇


from docling.document_converter import DocumentConverter

converter = DocumentConverter()
result = converter.convert("financial_report.pdf")

for table in result.document.tables:
df = table.export_to_dataframe()


📌 Github

@sqlhub

#AI #RAG #Docling #DataEngineering #PDF
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2111🔥3😱1
⚡️ SQL-приём: `GROUPING SETS` может заменить несколько тяжёлых `GROUP BY` + `UNION ALL`.

Допустим, нужно одновременно получить статистику:

- по стране и городу;
- только по стране;
- общий итог.

Часто пишут так:


SELECT country, city, SUM(revenue)
FROM sales
GROUP BY country, city

UNION ALL

SELECT country, NULL, SUM(revenue)
FROM sales
GROUP BY country

UNION ALL

SELECT NULL, NULL, SUM(revenue)
FROM sales;


Но SQL умеет это нативно:


SELECT
country,
city,
SUM(revenue) AS revenue
FROM sales
GROUP BY GROUPING SETS (
(country, city),
(country),
()
);


() означает grand total.

А если нужно понять, настоящий ли NULL лежит в данных или это строка итогов:


GROUPING(country)
GROUPING(city)


вернут 1 для колонок, которые были свернуты агрегированием.

🔥 Особенно полезно для:

OLAP-запросов;
аналитических отчётов;
дашбордов;
многоуровневых итогов;
запросов, где иначе появляется несколько почти одинаковых GROUP BY.

Ещё есть:


ROLLUP(...)
CUBE(...)


ROLLUP строит иерархические итоги, а CUBE - все комбинации измерений.

Если в аналитическом SQL у вас появляется цепочка из GROUP BY + UNION ALL, возможно, вы просто забыли про GROUPING SETS.

#SQL #PostgreSQL #DataEngineering #Analytics
9👍6🔥6🤔1😱1