Интересное что-то
517 subscribers
2.71K photos
253 videos
138 files
4.51K links
Материалы и мысли, понадерганные отовсюду
Блог: https://t.me/asisakov_channel
Чат: https://t.me/youknowds_chat
Download Telegram
#sql

Форматер для sql 🤯
Please open Telegram to view this post
VIEW IN TELEGRAM
Недавний пост про джоины набрал много просмотров и репостов. Значит такая информация интересна.
Продолжим наваливать базу 🤝

Популярные вопросы с собесов (lvl junior):

1) В какой последовательности БД на самом деле выполняет команды запроса:

select distinct
from
join
where
group by
having
order by
limit

Ответ:
Порядок выполнения SQL-запроса:
1. FROM (и JOIN) – выбираются таблицы и соединяются
2. WHERE – фильтруются строки
3. GROUP BY – группировка данных
4. HAVING – фильтрация групп
5. SELECT – выбор полей (включая вычисляемые)
6. DISTINCT – удаление дубликатов
7. ORDER BY – сортировка результатов
8. LIMIT / OFFSET – ограничение вывода

Более удобный вид:
FROM → JOIN → WHERE → GROUP BY → HAVING → SELECT → DISTINCT → ORDER BY → LIMIT


2) UNION ALL vs UNION - в чем разница?


UNION ALL:
• Не удаляет дубликаты
• Работает быстро (простое объединение)
• Сохраняет исходный порядок строк
• Используется, когда важна скорость и нужны все данные

UNION
• Удаляет повторяющиеся строки
• Работает медленно - требует сортировки (ресурсозатратно)
• Может изменить порядок строк
• Используется, когда нужны уникальные записи


Также могут дать простую задачку:

Даны таблицы T1(col1, col2), T2(col1, col3).
Наполнение таблиц:

T1
(13, 15)
(13, 15)
(13, 15)

T2
(13, 15)
(13, 14)

Будет ли работать запрос? Если будет работать, то сколько строк вернет?

SELECT * FROM T1
UNION
SELECT * FROM T2


Ответ:
Будет работать если тип полей в таблицах одинаковый (но возможно некоторые СУБД итак могут сделать неявное преобразование).
Вернется 2 строки:
13 14
13 15

3) Отличие UPDATE TABLE от ALTER TABLE.

Немного странный вопрос, но в этом и прикол. Некоторые джуны на нем тупят 😄

UPDATE TABLE:

• Изменяет сами данные в таблице (строки)
• Пример: UPDATE users SET age = 30 WHERE id = 1;
• Тип операции - DML (Data Manipulation Language). Поэтому операции нужно COMMIT-ть или при необходимости можно откатить - ROLLBACK
• Блокирует строки (зависит от СУБД). *Про блокировки сделаю отдельный пост, тема непростая.

ALTER TABLE:
• Изменяет структуру таблицы (добавить/удалить/изменить поле, ограничение, партицию, переименование таблицы и тд.).
• Пример: ALTER TABLE users ADD COLUMN email VARCHAR(100);
• Тип операции - DDL (Data Definition Language). Авто COMMIT, откатить нельзя (но есть нюансы, зависит от СУБД)
• Может блокировать всю таблицу


Подскажите плз вам интересна эта тема? Предлагайте свои варианты почему можно навалить базы?


#Вопросы_с_собесов #база #sql #jun
Please open Telegram to view this post
VIEW IN TELEGRAM
5 фишек Clickhouse для аналитиков

И снова на диване.


1️⃣ Отрисовка бар-чарта прямо в терминале

Оптимально для быстрого анализа, чтобы прикинуть распределение данных без экспорта в Excel или BI.

bar(x, min, max, width)

где х - название колонки, min и max - диапазон, а width - ширина бара в символах.

2️⃣ Словари для доступа к часто используемым справочникам

Например, когда нужно дотянуть страну или категорию пользователя. Это оптимальнее, чем обычный джойн, снижает нагрузку на базу данных. Для работы со словарем его нужно предварительно создать через CREATE DICTIONARY.

joinGet('dictionary_name', 'attribute', key)


3️⃣ Функция для воронки продукта

Возвращает номер максимального достигнутого шага для каждого пользователя, поэтому не забывай корректно обработать данные после использования функции, чтобы не потерять юзеров.

windowFunnel(window_seconds)(
timestamp_column,
event1_condition,
event2_condition,
...,
eventN_condition
)


4️⃣ Найти цепочку событий

В отличие от windowFunnel, которая возвращает номер достигнутого шага воронки, sequenceMatch отвечает на вопрос, встретилась ли в данных нужная цепочка событий. Оптимально для окон атрибуции в аналитике маркетинга.

sequenceMatch('pattern')(timestamp, cond1, cond2, ..., condN) 


5️⃣ Функции для АВ-тестов

ClickHouse позволяет делать анализ АВ-тестов прямо в SQL, спектр доступных функций довольно широкий. Приведу два примера:

studentTTest(sample1, sample2) -- равенство стредних

proportionsZTest(successes1, trials1, successes2, trials2) -- равенство долей (конверсий) в двух группах


P.S. Возможно, твоя задача решается проще, чем ты думаешь, нужно всего лишь загуглить или заджипитить)

Ставь 🔥, если узнал что-то новое

Ставь 🤕, если все это знал

#SQL_на_диване
@Divan_data
Please open Telegram to view this post
VIEW IN TELEGRAM