Горячее
Лучшее
Свежее
Подписки
Сообщества
Блоги
Эксперты
Войти
Забыли пароль?
или продолжите с
Создать аккаунт
Регистрируясь, я даю согласие на обработку данных и условия почтовых рассылок.
или
Восстановление пароля
Восстановление пароля
Получить код в Telegram
Войти с Яндекс ID Войти через VK ID
ПромокодыРаботаКурсыРекламаИгрыПополнение Steam
Пикабу Игры +1000 бесплатных онлайн игр Битва героев: RPG - увлекательная игра в жанре РПГ, позволяющая окунуться в невероятный фэнтезийный мир, полный приключений и захватывающих сражений.

Битва Героев: RPG

Приключения, Фэнтези

Играть

Топ прошлой недели

  • solenakrivetka solenakrivetka 7 постов
  • Animalrescueed Animalrescueed 53 поста
  • ia.panorama ia.panorama 12 постов
Посмотреть весь топ

Лучшие посты недели

Рассылка Пикабу: отправляем самые рейтинговые материалы за 7 дней 🔥

Нажимая «Подписаться», я даю согласие на обработку данных и условия почтовых рассылок.

Спасибо, что подписались!
Пожалуйста, проверьте почту 😊

Помощь Кодекс Пикабу Команда Пикабу Моб. приложение
Правила соцсети О рекомендациях О компании
Промокоды Биг Гик Промокоды Lamoda Промокоды МВидео Промокоды Яндекс Маркет Промокоды Пятерочка Промокоды Aroma Butik Промокоды Яндекс Путешествия Промокоды Яндекс Еда Постила Футбол сегодня
0 просмотренных постов скрыто
6
VelStyling
VelStyling
Серия Выгорела от работы аналитиком, но...

Поиск работы в конце 2025⁠⁠

5 дней назад

Сейчас декабрь, все закрывают квартал/год, делают бюджет на следующий год, но а я в поиске работы. Нет, начала поиск я не в декабре, а в октябре. Из результатов за 2 месяца - один оффер, но я отказалась от него. Не из-за содержания работы, а из-за процесса оформления - он вызвал сомнения.

И пока я продолжала поиск, я начала анализировать, что вообще происходит вокруг. Почему раньше всё работало одним способом, а теперь - совсем иначе.

Сейчас из каждого утюга слышу, что работу найти сложно, что на поиск работы надо закладывать 6 месяцев и т.д. и т.п. Ну ОК, подумала я, и вот в октябре начала искать, отрыла резюме на hh.ru для всех желающих, стала повторять теорию, нарешивать задачки и т.д.

Просматриваю вакансии, отбираю в избранное, потом анализирую, что и как там может быть. И наблюдаю за своим резюме. В итоге:
- просмотров резюме - кот наплакал,
- на отклики, релевантные моему опыту - отказы
- предложения только с релокацией в другую страну

Смотрю я статистику своего резюме: последний раз искала работу через HH в 2021 году, просмотров резюме по 10 в день. А сейчас дай бог 3 в неделю.

Резюме у меня одно, я его обновляю и дополняю по мере изменения моего опыта.

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

Причиной всего этого - автоматизация процессов. Первый скрининг резюме проводит не HR, а AI-агент, настроенный под конкретные триггерные слова.

Раньше мы писали резюме для людей.
Теперь - сначала для алгоритмов

Эпоха универсальных резюме закончилась.
Не потому, что специалисты стали хуже.
А потому что требования стали более структурированными, а инструменты поиска - более автоматизированными.

И теперь у меня вместо одного резюме - 4 резюме, с нотками особенностей под конкретные направления.

Опыт один и тот же.
Но фокус - разный.
И именно фокус видят алгоритмы.

И вот в этой статистике, которую вещает HH.ru - ссылка на презентацию здесь
Говорится о динамики среднего числа вакансий и резюме

Сопоставление вакансий идет к количеству резюме - не к количеству кандидатов.

Если даже возьмем меня, то у меня 4 резюме (планируется еще одно), т.е. количество резюме (в моем случае надо разделить на 4). А если это применить ко всем резюме, то может быть и картина то изменится. И не будем мы использовать слово рынок работодателя - а может быть другой рынок. Например рынок AI-ассистентов

Со стороны соискателей, тоже идет автоматизация. Соискатели в ручную откликаются на 100 вакансий из идеи - а что-то да и сработает. Либо также настраивают автоотклик, автообновление. Все это приводит к тому, что на одну вакансию HR-ы получают 400-3000 откликов, что руками нереально разобрать.

Поэтому компании:
- ставят автоскоринг
- ранжируют по ключевым словам
- убирают резюме, которые хоть чуть-чуть не совпадают
- сортируют по «свежести обновления»

И это не плохо и не хорошо — это новая норма.
Но к ней нужно адаптироваться.

Искать работу в конце 2025 года — это уже не про то, чтобы быть «идеальным кандидатом».
Это про то, чтобы быть заметным в мире, где первые фильтры проходят не люди, а алгоритмы.

Ну а я в своем канале про SQL буду продолжать делиться полезной информацией, интересными задачками и продолжать вдохновлять людей для изучения аналитики.
Если тебе интересно, подписывайся На связи: SQL

Этот канал я веду с нуля.

Показать полностью 1
[моё] Эмоциональное выгорание Опыт IT Поиск работы HH Аналитика Аналитик SQL Анализ данных Microsoft Excel База данных Длиннопост
14
3
VelStyling
VelStyling
Серия SQL: знакомство

Неочевидные факты про MIN и MAX⁠⁠

1 месяц назад

Простые функции. Кажется, что они находят просто минимум и максимум. Но есть и особенность их использования для интерпретации результатов. Об этом далее.

Неочевидные факты про MIN и MAX

А пока подписывайся на мой канал На связи: SQL Там я публикую посты про особенности и нюансы SQL. Этот канал про то, как не бояться баз данных, понимать, что такое JOIN, GROUP BY и почему NULL ≠ 0. Его я веду с нуля подписчиков. Присоединяйся!

MIN и MAX — не только про числа

Они работают с любыми типами данных:

  • датами (MIN(date) даст самую раннюю дату),

  • строками (MAX(name) вернёт последнюю в алфавитном порядке),

  • булевыми значениями (MIN(bool) — false, MAX(bool) — true).

Иногда этим можно ловко воспользоваться — например, чтобы узнать, есть ли хоть один true:

SELECT MAX(is_active) FROM users;

Если вернёт true — значит, кто-то активен. Красиво и лаконично.

MIN и MAX — не только агрегатные, но и оконные функции

Можно получить минимум или максимум в рамках окна, не теряя детализацию:

SELECT

user_id,

date,

MAX(date) OVER (PARTITION BY user_id) AS last_activity

FROM logins;

Так можно легко вытащить, когда пользователь последний раз заходил — без группировки и без JOIN.

MIN/MAX и NULL

Они игнорируют NULL.
То есть если у тебя все значения NULL, то результат — NULL.
Это часто ломает аналитику, особенно при сравнении с COALESCE или при объединении данных.

SELECT MAX(COALESCE(score, 0)) -- вернёт 0, а не NULL

→ Иногда важно явно заменить NULL, чтобы не получить "пустой" результат.

MIN/MAX могут ускорить выборку

Если в таблице есть индекс по нужному полю —
MIN() и MAX() используют только крайний элемент индекса.
Это значит, что:

SELECT MAX(price) FROM products;

может пройтись не по миллиону строк, а просто взять последнее значение из B-tree индекса.
То есть — мгновенно.

Можно найти строку с минимальным/максимальным значением

Классическая боль аналитика: как вытащить не просто максимум, а всю строку, где он встретился.

💡 Один из лучших способов — оконная функция + фильтр:

SELECT *

FROM (

SELECT *,

ROW_NUMBER() OVER (ORDER BY salary DESC) AS rn

FROM employees

) t

WHERE rn = 1;

→ Получаем сотрудника с максимальной зарплатой.
Без подзапросов, без JOIN, без боли.

Неочевидный кейс: поиск экстремумов в группах

SELECT department, MIN(salary), MAX(salary)

FROM employees

GROUP BY department;

Классика, но важно:
разница между MAX и MIN = разброс значений, полезный показатель в аналитике (например, зарплат).

💬 Если хочешь больше таких разборов с реальными кейсами SQL без воды — подписывайся на мой Telegram 👉На связи: SQL
Там я рассказываю про SQL так, чтобы стало интересно даже тем, кто раньше его ненавидел 😄

Показать полностью 1
[моё] SQL Аналитика Аналитик База данных Microsoft Excel Анализ данных Min Саморазвитие Эмоциональное выгорание Длиннопост
4
VelStyling
VelStyling
Серия SQL: знакомство

DELETE в SQL: когда одно слово может стереть ваши данные⁠⁠

2 месяца назад

DELETE — инструменте, который может как спасти вашу базу данных от хлама, так и превратить её в пустыню за считанные секунды.

DELETE как цифровой пылесос**, который может убрать всё, что вы ему скажете. Только вот вернуть обратно будет ой как непросто!

DELETE в SQL: когда одно слово может стереть ваши данные

А пока подписывайся на мой канал На связи: SQL Там я публикую посты про особенности и нюансы SQL. Этот канал про то, как не бояться баз данных, понимать, что такое JOIN, GROUP BY и почему NULL ≠ 0. Его я веду с нуля подписчиков. Присоединяйся!

Базовый синтаксис:

DELETE FROM таблица
WHERE условие;

Можно использовать EXISTS с подзапросами

DELETE FROM orders

WHERE EXISTS (

SELECT 1

FROM customers

WHERE customers.id = orders.customer_id

AND customers.status = 'deleted' );

Удаляет заказы неактивных клиентов.

Можно использовать JOIN

DELETE o

FROM orders o

INNER JOIN customers c ON o.customer_id = c.id

WHERE c.registration_date < '2020-01-01';

Удаляет заказы клиентов, зарегистрированных до 2020 года.

Как происходит удаление записей?

Физическое удаление в SQL — это не мгновенное стирание данных с диска. Когда вы выполняете DELETE:

  • Система записывает операцию в журнал транзакций

  • Помечает удалённые строки как свободные

  • Физическое место может быть использовано для новых данных

  • Сами данные остаются в файле некоторое время

Формируется основной файл .mdf (или аналогичный). Также информация записывается в журнал транзакций. Сроки хранения удаленных данных зависят от:
- модели восстановления базы данных
- активности базы данных
- настроек резервного копирования
- объема свободного места

Удаленные данные могут храниться до следующего бэкапа или до перезаписи журнала.

Способы восстановления данных после DELETE

  1. Восстановление из резервной копии

    RESTORE DATABASE имя_базы FROM DISK = 'путь_к_бэкапу'

  2. Использование моментальных снимков (Snapshot)

    CREATE DATABASE имя_снимка

    ON (NAME = имя_файла, FILENAME = 'путь_к_файлу')

    AS SNAPSHOT OF исходная_база;

    Восстановление данных из снимка:

    INSERT INTO исходная_таблица

    SELECT * FROM снимок.dbo.таблица

  3. Восстановление через LSN (Log Sequence Number)

    Если есть журналы транзакций:

    BACKUP LOG имя_базы TO DISK = 'путь_к_журналу'

    Поиск удалённых записей:
    SELECT [Current LSN], [Transaction ID]

    FROM fn_dblog(NULL, NULL)

    WHERE Operation = 'LOP_DELETE_ROWS'

  4. Либо использовать специальные посторонние программы для восстановления БД

Чтобы предотвратить потерю данных:

  • Регулярно создавайте резервные копии

  • Используйте транзакции (BEGIN TRANSACTION / ROLLBACK)

  • Тестируйте DELETE-запросы на тестовой базе

  • Применяйте WHERE с осторожностью

  • Настройте политики резервного копирования

DELETE vs TRUNCATE

Многие думают, что TRUNCATE и DELETE — это одно и то же. На самом деле:

  • DELETE удаляет строки по одной и записывает каждую операцию в журнал транзакций

  • TRUNCATE мгновенно очищает таблицу, минуя журнал (кроме некоторых случаев)

При выполнении DELETE:

  • Блокируются только удаляемые строки

  • Другие транзакции могут читать незаблокированные данные

  • В некоторых СУБД возможна эскалация блокировок до уровня таблицы

  • Не затрагивает структуру индексов

  • Индексы остаются в прежнем состоянии

  • Это ускоряет процесс удаления

  • Не сбрасывает счётчики автоинкремента

  • Сохраняет текущее значение последовательности

  • Важно при работе с первичными ключами

  • Активируются триггеры AFTER DELETE

  • Можно отслеживать удалённые строки через виртуальную таблицу deleted

  • Триггеры могут отменить операцию удаления

Чтобы сохранить целостность данных можно использовать ON DELETE CASCADE
Это позволит там, где есть зависимость по внешним ключам произвести удаление зависимых строк.

Показать полностью 1
[моё] SQL Аналитик Аналитика Большие данные Microsoft Excel Анализ данных Эмоциональное выгорание Самообразование База данных Длиннопост
6
VelStyling
VelStyling
Серия SQL: знакомство

LIMIT и интересные кейсы с ним. Или почему LIMIT - друг аналитика⁠⁠

3 месяца назад

Обычно все знают самое базовое применение LIMIT - ограничение строк выдачи в запросе.

LIMIT 10 -> показать 10 строк

Но применение LIMIT не ограничивается только ограничением :-).
Есть интересные кейсы по использованию LIMIT в своих запросах.
Об этом чуть ниже.

А пока подписывайся на мой канал На связи: SQL Там я публикую посты про особенности и нюансы SQL. Этот канал про то, как не бояться баз данных, понимать, что такое JOIN, GROUP BY и почему NULL ≠ 0. Его я веду с нуля подписчиков. Присоединяйся!

LIMIT и интересные кейсы с ним. Или почему LIMIT - друг аналитика

И так, какие же кейсы есть с применением LIMIT

  1. LIMIT + OFFSET

    Многие помнят про LIMIT, но забывают про то, что можно еще применять сдвиг.

    SELECT *
    FROM users
    ORDER BY id
    LIMIT 10 OFFSET 20;

    Этот запрос вернёт 10 строк, начиная с 21-й.

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

    Но этот кейс имеет и минусы: OFFSET все равно просматривает первые 20 строк, чтобы добраться до нужных. При больших объемах OFFSET работает медленно.

  2. LIMIT в UPDATE и DELETE

    Да, да - в этих операторах тоже можно использовать LIMIT, не только в SELECT

    DELETE FROM logs ORDER BY created_at ASC LIMIT 1000;

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

  3. LIMIT в подзапросах

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


    Найдем самый дорогой заказ:

    SELECT *

    FROM orders

    WHERE id = (SELECT id FROM orders ORDER BY price DESC LIMIT 1);

    Это иногда проще, чем возиться с MAX() и джойнами.

  4. LIMIT vs FETCH … WITH TIES

    В некоторых СУБД (например, SQL Server, Oracle) есть фича:

    SELECT *

    FROM products

    ORDER BY price DESC

    FETCH FIRST 3 ROWS WITH TIES;

    Такой запрос вернёт не просто 3 строки, а все строки, у которых цена такая же, как у третьей записи.
    (например, если на третьем месте несколько товаров с одинаковой ценой).


    LIMIT показывает первые N строк после сортировки
    А вот WITH TIES говорит: «Выдай все строки, которые наравне с последней по значению сортировки».


    В других СУБД такой синтаксис можно реализовать через LIMIT + подзапрос с оконной функцией RANK()

  5. LIMIT 0

    Очень полезный трюк.

    SELECT * FROM users LIMIT 0;

    Вернёт пустую таблицу, но со всеми названиями и типами столбцов.
    Это часто используют для генерации схемы в BI-инструментах или в тестах

  6. LIMIT в CTE (PostgreSQL)

    Можно ограничивать данные прямо на уровне общего табличного выражения (CTE), чтобы уменьшить нагрузку:

    WITH top_orders AS (

    SELECT * FROM orders ORDER BY price DESC LIMIT 100

    )

    SELECT * FROM top_orders WHERE customer_id = 42;

Так мы сначала берём только 100 дорогих заказов, а потом фильтруем по клиенту.

В итоге LIMIT — это не просто «дай 10 строк», а инструмент для оптимизации, постраничной навигации, аккуратных обновлений и даже для защиты от перегруза.

Подписывайся на мой ТГ канал На связи: SQL, чтобы узнавать/вспоминать еще больше нюансов SQL запросов.

Показать полностью 1
[моё] Эмоциональное выгорание Аналитика Аналитик Анализ данных SQL Ms SQL База данных Системный анализ Системный аналитик Длиннопост
0
1
VelStyling
VelStyling
Серия SQL: знакомство

ORDER BY - это как уборка в шкафу. Вещи можно разложить по цвету, по размеру или просто свалить все в кучу⁠⁠

3 месяца назад

ORDER BY — штука вроде бы простая («отсортируй строки»), но там есть много нюансов, про которые мы просто не помним или не пользуемся.

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

В своем канале На связи: SQL рассказываю про некоторые забытые нюансы языка SQL, особенности и необходимую теорию, чтобы любой начинающий мог свободно познакомиться с этим языком и применить его в дальнейшем для своих задач. Канал создан недавно, с 0 подписчиков, но уже активно наполняется контентом. Подписывайся!

ORDER BY - это как уборка в шкафу. Вещи можно разложить по цвету, по размеру или просто свалить все в кучу
  1. Блок с ORDER BY предназначен для сортировки результата выборки.
    По умолчанию сортировка ASC (по возрастанию). Можно явно писать:

ORDER BY age ASC -- от младших к старшим
ORDER BY age DESC -- от старших к младшим

2. Можно сортировать сразу по нескольким столбцам:

ORDER BY country, city

Сначала сортируются страны, внутри них — города.

3. Можно писать не имя, а номер колонки в SELECT:

SELECT name, age
FROM users
ORDER BY 2 DESC; -- сортируем по age

Но это считается «плохим тоном» — лучше явно указывать названия. Хотя мне очень нравится это использовать, особенно, когда в селекте не просто имя столбца, а вычисление.

4. NULL в ORDER BY требует особого внимание.
NULL в разных БД обрабатывается по-разному.

В PostgreSQL:

  • ASC → NULL идут в конце

  • DESC → NULL идут в начале

можно явно писать:

ORDER BY age ASC NULLS FIRST;
ORDER BY age DESC NULLS LAST;

В MySQL и SQL Server правила отличаются:

  • в MySQL NULL всегда считаются «меньше всего» (т.е. идут первыми в ASC).

  • в SQL Server можно управлять через ISNULL()/COALESCE().

В MySQL и SQL Server нельзя использовать NULLS FIRST или NULLS LAST при сортировке,

Для SQL Server используем:

ORDER BY ISNULL(age, 9999) ASC;
ORDER BY COALESCE(age, 9999) ASC;

Здесь NULL мы заменяем на большое число (9999), и оно уходит в конец сортировки по возрастанию.
А если хотим NULL в начало — ставим что-то маленькое, например -1.

Для MySQL есть поведение по умолчанию:

  • При ASC → NULL идут первые

  • При DESC → NULL идут последние

А если нужно наоборот, то делаем хитрость с IS NULL:

ORDER BY age IS NULL, age ASC;

Здесь age IS NULL вернёт 1 для NULL и 0 для обычных значений.
SQL сначала отсортирует по этому условию (0 → 1), а потом уже по age.

5. Можно сортировать не только по полям, но и по функциям.

ORDER BY LENGTH(name) DESC;
ORDER BY purchase_amount * discount;

6. Случайная сортировка - имеет место быть. Но очень "дорога" в использовании на больших объемах.

-- PostgreSQL / SQLite
ORDER BY RANDOM()

-- MySQL
ORDER BY RAND()

Часто случайная сортировка используется при тестировании на небольших объемах.
- хотим показать пользователю случайный товар в магазине
- хотим проверить, как работает приложение, не завися от конкретного порядка записей
- рекомендательные системы: в выдачу добавляем случайный товар, чтобы не зацикливать пользователя только на "популярных" товарах.
- игры или викторины: рандомная выдача вопросов.

7. Есть еще такое понятие как COLLATION (сравнение строк).

ORDER BY учитывает локаль (collation). Поэтому, например, русские буквы могут сортироваться по-разному в разных СУБД:

  • А может идти перед а, или наоборот.

  • Можно явно указать сортировку:

ORDER BY name COLLATE "C" -- по байтовому значению
ORDER BY name COLLATE "ru_RU" -- по русскому алфавиту

Представь, что у тебя есть список имён:
['Елена', 'елена', 'Жанна', 'Анна']

Когда ты пишешь в SQL:

SELECT * FROM users ORDER BY name;

база должна решить:

  • считать ли «Елена» и «елена» одинаковыми?

  • что идёт раньше: «Ж» или «А»?

  • как сравнивать буквы с диакритикой: «é» vs «e»?

Вот именно на эти вопросы отвечает collation.

То есть COLLATION — это как правило сортировки в библиотеке: от него зависит, где именно окажется твоя книга.

То есть, ORDER BY — это не просто «отсортировать», а ещё и про то:

  • куда денутся NULL

  • как сортируются строки (с учётом локали)

  • можно ли сортировать по выражениям или случайно

В моем ТГ канале На связи: SQL я знакомлю новичков с языком SQL и хочу, чтобы те, кто желает познакомиться с анализом данных с легкостью шли в это направление. Присоединяйся!

Показать полностью
[моё] Аналитика Математика Урок Эмоциональное выгорание SQL Ms SQL Аналитик Анализ данных База данных Программирование Длиннопост
0
0
VelStyling
VelStyling
Серия SQL: знакомство

AND и OR в SQL: как правильно соединять условия⁠⁠

3 месяца назад

Когда мы работаем с базой данных, почти всегда хотим не просто что-то выбрать, а применить несколько условий сразу. Например: выбрать всех клиентов старше 18 лет и с активной подпиской.

И здесь на помощь приходят два основных логических оператора: AND и OR.

AND и OR в SQL: как правильно соединять условия

Что делают AND и OR

  • AND — «и». Все условия должны быть выполнены одновременно.
    Пример: выбрать из холодильника молоко и яйца, чтобы приготовить омлет:

SELECT *

FROM fridge

WHERE product = 'milk' AND product = 'eggs';

(Да, в реальности одной строки с молоком и яйцом не будет, но идея ясна: оба условия должны выполняться вместе.)

OR — «или». Достаточно, чтобы выполнено было хотя бы одно условие.
Пример: выбрать продукты, которые нужно купить или молоко, или яйца:

SELECT *

FROM shopping_list

WHERE product = 'milk' OR product = 'eggs';

Где могут использоваться

Эти операторы обычно используют в блоке WHERE, чтобы фильтровать данные.
Также можно применять их в:

  • HAVING — фильтрация агрегатов после GROUP BY

  • JOIN ON — комбинирование условий соединения таблиц

Пример с HAVING:

SELECT category, COUNT(*)

FROM fridge

GROUP BY category

HAVING COUNT(*) > 5 AND AVG(expiry_date) < '2025-08-01';

Особенности и нюансы:

  • Порядок выполнения важен

    AND имеет более высокий приоритет, чем OR.

    Если смешиваете их, всегда используйте скобки для точного порядка:

    SELECT *

    FROM fridge

    WHERE (product = 'milk' OR product = 'eggs') AND expiry_date < '2025-08-01';

  • AND «сжимает» результат, OR «расширяет» результат

    AND оставляет меньше строк, OR — больше

Частые ошибки

  • Забыли скобки и получили слишком большой или слишком маленький результат

  • Использовали AND там, где нужен OR (или наоборот)

  • Смешали NULL значения: NULL AND TRUE и NULL OR TRUE могут вести себя неожиданно

Представим, что мама проверяет холодильник:

  • У неё есть список продуктов, которые могут испортиться: молоко, яйца, йогурт

  • Она хочет приготовить что-то, если и молоко, и яйца в наличии → AND

  • Она хочет перекусить, если есть молоко или йогурт → OR

В SQL это выглядит так:

-- Для приготовления омлета

SELECT *

FROM fridge

WHERE product = 'milk' AND product = 'eggs';

-- Для перекуса

SELECT *

FROM fridge

WHERE product = 'milk' OR product = 'yogurt';

AND и OR — это простые, но мощные инструменты фильтрации. Правильное использование скобок и понимание приоритета операторов помогает избежать ошибок и выбирать точно те данные, которые нужны.

А в своем канале На связи: SQL я публикую информацию с особенностями и нюансами в языке SQL, разбираю аналитические запросы и подходы работы с данными. Канал создала недавно с нулем подписчиков, но там уже есть интересная информация для работы аналитиков. Подписывайся!

Показать полностью
[моё] Аналитика Эмоциональное выгорание Аналитик Системный аналитик SQL Microsoft Excel Таблица Данные База данных IT
1
6
VelStyling
VelStyling
Серия SQL: знакомство

WHERE в SQL: как домохозяйка наводит порядок в холодильнике⁠⁠

3 месяца назад

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

WHERE в SQL: как домохозяйка наводит порядок в холодильнике

Вот тут и появляется WHERE. Это фильтр, который помогает выбрать именно нужные строки из таблицы — или продукты из холодильника.

А в своем канале На связи: SQL я публикую информацию с особенностями и нюансами в языке SQL, разбираю аналитические запросы и подходы работы с данными. Канал создала недавно с нулем подписчиков, но там уже есть интересная информация для работы аналитиков. Подписывайся!

Нам нужно выкинуть все продукты, у которых истек срок годности:

SELECT *
FROM fridge
WHERE expiry_date < CURRENT_DATE;

fridge — наша таблица с продуктами
expiry_date < CURRENT_DATE — условие: выбираем просроченные продукты
CURRENT_DATE - текущая дата

Что можно писать в WHERE

  • Сравнения: =, >, <, >=, <=

  • Логические связки: AND, OR, NOT

  • Проверки на вхождение: IN, BETWEEN, LIKE

  • Подзапросы: «проверить список покупок перед выбором»

Или, мы хотим приготовить что-то на десерт:

SELECT *
FROM fridge
WHERE category = 'dessert' AND expiry_date > CURRENT_DATE;

Условие AND expiry_date > CURRENT_DATE добавляем на случай, если мы не выкинули всю просрочку до этого.

Подзапросы

В WHERE можно использовать подзапросы. Это когда нам нужна информация из другого источника, чтобы использовать ее в своем запросе. Например, нам надо понять что из рецепта отсутствует у нас в холодильнике.

SELECT *
FROM cooking_recipe
WHERE product NOT IN (SELECT product FROM fridge);

WHERE проверяет какие продукты отсутствуют в холодильнике.

Аналогично можно использовать EXISTS или NOT EXISTS
SELECT *
FROM fridge f
WHERE EXISTS (SELECT 1 FROM cooking_recipe s WHERE s.product = f.product);

EXISTS = есть продукт в списке
NOT EXISTS = нет продукта в списке

ANY \ ALL

Эти конструкции позволяют сравнивать с набором значений.

SELECT *
FROM fridge
WHERE expiry_date <= ALL (SELECT expiry_date FROM fridge WHERE category = 'milk');

Все хорошие домохозяйки используют принцип ротации. Выбирают продукты, срок годности которых меньше всех в категории “молоко”.

  • Подзапрос (SELECT expiry_date FROM fridge WHERE category = 'milk') возвращает даты всех банок молока.

  • Условие expiry_date <= ALL (...) означает: выбрать только те банки, у которых дата годности меньше или равна каждой другой банке молока.

  • Практически это банка (или несколько, если даты совпадают), которая старше всех остальных.

То есть, результат будет одна или несколько банок с самой ранней датой годности.

SELECT *
FROM fridge
WHERE expiry_date <= ANY (SELECT expiry_date FROM fridge WHERE category = 'milk');

  • Условие expiry_date <= ANY (...) означает: выбрать все банки молока, у которых дата годности меньше или равна хотя бы одной другой банке молока.

  • Тут почти все банки проходят условие, кроме самой свежей (если она самая большая по сроку).

  • Результат может быть несколько банок, не обязательно только одна. Все, кто «моложе или равны хотя бы одной другой», будут выбраны.

CASE в WHERE

Можно использовать CASE для сложной логики

SELECT *
FROM fridge
WHERE
CASE
WHEN product = 'milk' THEN shelf = 'top'
ELSE shelf = 'middle'
END;

Если я ищу молочные продукты в холодильнике, то должна их искать на самой верхней полке, иначе - на средней.


Ну а если тебе нужны слова поддержки и мотивации, то заглядывай в канал Сила слов. Там каждое утро приходит мотивационное сообщение для тебя, чтобы ты верил себе и в себя, продолжал или только начинал действовать.

Показать полностью
[моё] Аналитика Эмоциональное выгорание Услуги SQL Microsoft Excel Аналитик Данные База данных Запросы IT Смена профессии Длиннопост
5
VelStyling
VelStyling
Серия SQL: знакомство

Структура запроса SQL и порядок выполнения блоков⁠⁠

3 месяца назад

Многие думают, что SQL читается сверху вниз — как написано, так и выполняется. Но это не так.
SQL-запрос устроен хитро: порядок написания ≠ порядок выполнения.

Структура запроса SQL и порядок выполнения блоков

Классический скелет запроса выглядит так:

SELECT — какие поля выбрать

FROM — из какой таблицы

JOIN — если нужно соединение

WHERE — фильтрация строк до агрегации

GROUP BY — группировка

HAVING — фильтрация групп (после агрегации)

ORDER BY — сортировка

LIMIT — ограничение количества строк

SELECT — это конструктор. Ты как будто сначала берёшь детали, потом отбираешь нужные, потом собираешь по группам, и только потом смотришь итог.

Мы привыкли, что текст читается слева направо, сверху вниз. Но не везде так:

  • в арабском и иврите — читают справа налево,

  • в китайском — традиционно писали сверху вниз.

Это не ошибка, не странность, а особенность языка, которая исторически так сложилась.

SQL — тоже «язык», и у него есть свои правила: мы пишем запрос сверху вниз, начиная с SELECT
А выполняется сам запрос совсем в другом порядке.

Об этом уже есть пост в моем новом канале На связи: SQL. Это канал про нюансы SQL, практические задачки и многое другое, что связано с аналитикой. Его я создала недавно абсолютно с нуля. Так что, если интересно, то подписывайся. А вот и ссылка на пост про последовательность выполнения запросов.

Где ещё встречается разница между тем, как пишут и как «читают»:

  • Музыка 🎼
    В нотах всё аккуратно записано: сверху вниз, слева направо. Но музыкант, читая ноты, должен сначала понять тональность, размер, темп, и только потом играть каждую ноту по порядку. То есть фактически исполняется не в том же порядке, как просто «прочитал глазами».

  • Рецепты в кулинарии 👩‍🍳
    В рецепте шаги написаны линейно: 1, 2, 3. Но когда готовишь, иногда сначала ставишь воду кипятиться, пока режешь овощи. Т.е. порядок написанного ≠ фактический порядок действий.

  • Юридические документы 📑
    Контракт читается сверху вниз, но при толковании юристы сначала смотрят на определения терминов, потом на условия, потом на исключения.

  • Программирование в целом 💻
    В коде написано: «вызови функцию А, потом Б». Но компилятор или интерпретатор сначала обрабатывает импорт библиотек, парсит синтаксис, оптимизирует, и только потом «доходит» до исполнения.

В SQL — такая же история: пишем запрос сверху вниз, но база данных «читает» его по-своему. Про фактический порядок выполнения я написал подробно в своём канале На связи: SQL, так что если интересно — загляните 😉

Показать полностью
[моё] Microsoft Excel Аналитика Эмоциональное выгорание SQL Аналитик База данных Самообразование Профессия Онлайн-курсы Бесплатное обучение Поиск работы Курсы
3
Посты не найдены
О нас
О Пикабу Контакты Реклама Сообщить об ошибке Сообщить о нарушении законодательства Отзывы и предложения Новости Пикабу Мобильное приложение RSS
Информация
Помощь Кодекс Пикабу Команда Пикабу Конфиденциальность Правила соцсети О рекомендациях О компании
Наши проекты
Блоги Работа Промокоды Игры Курсы
Партнёры
Промокоды Биг Гик Промокоды Lamoda Промокоды Мвидео Промокоды Яндекс Маркет Промокоды Пятерочка Промокоды Aroma Butik Промокоды Яндекс Путешествия Промокоды Яндекс Еда Постила Футбол сегодня
На информационном ресурсе Pikabu.ru применяются рекомендательные технологии