Data Science. SQL hub
По всем вопросам- @workakkk @itchannels_telegram - 🔥лучшие ит-каналы @ai_machinelearning_big_data - Machine learning @pythonl - Python @pythonlbooks- python книги📚 @datascienceiot - ml книги📚 РКН: https://vk.cc/cIi9vo #VRHSZ
显示更多📈 Telegram 频道 Data Science. SQL hub 的分析概览
频道 Data Science. SQL hub (@sqlhub) 俄语 语言赛道中的 是活跃参与者。目前社区聚集了 35 853 名订阅者,在 技术与应用 类别中位列第 3 833,并在 俄罗斯 地区排名第 18 125 位。
📊 受众指标与增长动态
自 невідомо 创建以来,项目保持高速增长,吸引了 35 853 名订阅者。
根据 12 六月, 2026 的最新数据,频道保持稳定运转。过去 30 天订阅人数变化为 8,过去 24 小时变化为 -2,整体触达仍然可观。
- 认证状态: 未认证
- 互动率 (ER): 平均受众互动率为 10.08%。内容发布后 24 小时内通常能获得 4.38% 的反应,占订阅者总量。
- 帖子覆盖: 每篇帖子平均可获得 3 614 次浏览,首日通常累积 1 571 次浏览。
- 互动与反馈: 受众积极参与,单帖平均反应数为 15。
- 主题关注点: 内容集中在 sql, индекс, postgres, index, sqlite 等核心主题上。
📝 描述与内容策略
作者将该频道定位为表达主观观点的平台:
“По всем вопросам- @workakkk
@itchannels_telegram - 🔥лучшие ит-каналы
@ai_machinelearning_big_data - Machine learning
@pythonl - Python
@pythonlbooks- python книги📚
@datascienceiot - ml книги📚
РКН: https://vk.cc/cIi9vo
#VRHSZ”
凭借高频更新(最新数据采集于 13 六月, 2026),频道始终保持新鲜度与高覆盖。分析显示受众积极互动,使其成为 技术与应用 类别中的关键影响点。
sender_id и количество сообщений.
Подход:
1) Отфильтровать сообщения по интервалу августа — в T-SQL удобно задавать полуинтервалом [2022-08-01, 2022-09-01), без функций над датой (чтобы не ломать индексы).
2) Посчитать сообщения по sender_id.
3) Отсортировать по убыванию и взять TOP 2.
Если хотите корректно обрабатывать «ничьи» — используйте DENSE_RANK().
Быстрое решение (T-SQL):
SELECT TOP (2)
sender_id,
COUNT(*) AS message_count
FROM messages
WHERE sent_date >= '2022-08-01'
AND sent_date < '2022-09-01'
GROUP BY sender_id
ORDER BY COUNT(*) DESC, sender_id;
Вариант с учетом ничьих (tie-safe):
WITH monthly AS (
SELECT sender_id, COUNT(*) AS message_count
FROM messages
WHERE sent_date >= '2022-08-01'
AND sent_date < '2022-09-01'
GROUP BY sender_id
),
ranked AS (
SELECT sender_id, message_count,
DENSE_RANK() OVER (ORDER BY message_count DESC) AS rnk
FROM monthly
)
SELECT sender_id, message_count
FROM ranked
WHERE rnk <= 2
ORDER BY message_count DESC, sender_id;
Почему так:
- Фильтр по диапазону дат без функций сохраняет «sargable» запрос (используются индексы по sent_date).
- GROUP BY + COUNT(*) дают нужную метрику.
- DENSE_RANK() аккуратно захватывает все «совместные» вторые места.
@sqlhubPARTITION BY:
WITH numbered AS (
SELECT
id,
email,
ROW_NUMBER() OVER (PARTITION BY email ORDER BY id) AS rn
FROM users
)
SELECT id, email
FROM numbered
WHERE rn = 1;
📌 Что происходит:
- PARTITION BY email группирует строки по email
- ROW_NUMBER() нумерует их внутри группы
- WHERE rn = 1 оставляет только первую запись (а все дубликаты убираются)
💡 Так можно элегантно чистить таблицы от дублей без лишних вложенных запросов.
Хочешь больше таких фишек? Подписывайся на нас и каждый день получай свежие приёмы, которые реально прокачают твои навыки разработчика! 🚀
@sqlhubemails(email_id, user_id, signup_date)
- texts(text_id, email_id, signup_action {'Confirmed','Not confirmed'}, action_date)
Решение (универсально для Postgres/MySQL):
SELECT DISTINCT e.user_id
FROM emails e
WHERE EXISTS (
SELECT 1
FROM texts t1
WHERE t1.email_id = e.email_id
AND t1.signup_action = 'Confirmed'
AND DATE(t1.action_date) = DATE(e.signup_date + INTERVAL '1 day') -- подтвердил на 2-й день
)
AND NOT EXISTS (
SELECT 1
FROM texts t0
WHERE t0.email_id = e.email_id
AND t0.signup_action = 'Confirmed'
AND DATE(t0.action_date) = DATE(e.signup_date) -- не подтвердил в день регистрации
);
Вариант через агрегацию (Postgres)🧩️️
SELECT e.user_id
FROM emails e
JOIN texts t ON t.email_id = e.email_id
GROUP BY e.user_id, e.signup_date
HAVING COUNT(*) FILTER (
WHERE t.signup_action = 'Confirmed' AND DATE(t.action_date) = DATE(e.signup_date)
) = 0
AND COUNT(*) FILTER (
WHERE t.signup_action = 'Confirmed' AND DATE(t.action_date) = DATE(e.signup_date + INTERVAL '1 day')
) >= 1;
@sqlhubCOUNT(DISTINCT ...) прямо в выборке.
SELECT
user_id,
COUNT(DISTINCT product_id) AS unique_products,
COUNT(DISTINCT category) AS unique_categories
FROM purchases
GROUP BY user_id;
🔎 В одном запросе можно узнать, сколько разных товаров и категорий купил каждый пользователь.
Это упрощает аналитику и заменяет сложные вложенные запросы.
@sqlhubCASE WHEN.
SELECT
customer_id,
SUM(CASE WHEN status = 'completed' THEN amount ELSE 0 END) AS completed_sum,
SUM(CASE WHEN status = 'pending' THEN amount ELSE 0 END) AS pending_sum
FROM orders
GROUP BY customer_id;
🔎 В одном запросе можно посчитать суммы по разным статусам — и не делать несколько JOIN или подзапросов.
Работает также с COUNT(), AVG() и другими агрегатами.
@sqlhubinnodb_buffer_pool_size обычно = 70%+ RAM на выделенном сервере
- Обход кэша ОС: с innodb_flush_method='O_DIRECT' InnoDB работает напрямую с диском
- Двухсекционный LRU: страницы сначала в old, только потом (через innodb_old_blocks_time`) в `young. Это спасает от «выметания» кэша при больших сканах
Postgres
- Внутренний кэш + page cache ОС: shared_buffers обычно около 30% RAM, остальное оставляют ОС
- Clock-sweep: у страницы счётчик обращений, уменьшается при «прокрутке часов». Когда падает до нуля — страница освобождается
Практические выводы
- Bulk-операции: InnoDB устойчивее к «пробиванию» кэша, в Postgres часть нагрузки идёт в кэш файловой системы
- Тюнинг памяти: в MySQL раздувают buffer pool, в Postgres shared_buffers умеренный, а остальное доверяют ОС
Что стоит проверить в бенчмарках Postgres
- Размер shared_buffers: 4% / 10% / 30% / 50% RAM
- Сценарии: OLTP, последовательные сканы, смешанные нагрузки
- Рабочий набор: меньше / равен / больше доступной RAM
- Метрики: TPS/QPS, p95/p99 латентность, hit ratio, про
https://github.com/postgres/postgres/blob/master/src/backend/storage/buffer/README
现已上线!2025 年 Telegram 研究 — 年度关键洞察 
