🔥 5 типичных ошибок при написании SQL-запросов
Сегодня подготовили разбор типичных ошибок при работе с SQL. Традиционно - вместе с онлайн-университетом SF Education 🙂
Основные тезисы:
1. Преобразование типов. 1/2 = 0. В некоторых СУБД деление целых чисел дает строго целое число. Как быть - рассказываем в карточках.
2. HAVING вместо WHERE. Встречали конструкции типа
3. Алиасы и план запроса. Фильтр WHERE обрабатывается сильно раньше оператора SELECT в плане запросе. Это накладывает некоторые ограничения на использование алиасов.
4. Лишние подзапросы. Тот случай, когда размер - не главное. Главное - опыт 😉
5. Игнорирование CASE. С помощью CASE можно сократить запрос в несколько раз и даже решить некоторые нетривиальные задачи.
Сегодня подготовили разбор типичных ошибок при работе с SQL. Традиционно - вместе с онлайн-университетом SF Education 🙂
Основные тезисы:
1. Преобразование типов. 1/2 = 0. В некоторых СУБД деление целых чисел дает строго целое число. Как быть - рассказываем в карточках.
2. HAVING вместо WHERE. Встречали конструкции типа
HAVING date >= '2019-01-01'? Так делать не надо. 3. Алиасы и план запроса. Фильтр WHERE обрабатывается сильно раньше оператора SELECT в плане запросе. Это накладывает некоторые ограничения на использование алиасов.
4. Лишние подзапросы. Тот случай, когда размер - не главное. Главное - опыт 😉
5. Игнорирование CASE. С помощью CASE можно сократить запрос в несколько раз и даже решить некоторые нетривиальные задачи.
👍13
🔥 Тестовое задание на позицию Бизнес-аналитика
Собрали для вас тестовое задание на позицию бизнес-аналитика 👉🏻https://vk.cc/cbjbKI
Тест состоит из вопросов по темам:
* Python (Pandas)
* SQL
* Продуктовые метрики
* Статистика и теория вероятностей
* Power BI
А на сколько вопросов вы смогли ответить правильно? 😏
Собрали для вас тестовое задание на позицию бизнес-аналитика 👉🏻https://vk.cc/cbjbKI
Тест состоит из вопросов по темам:
* Python (Pandas)
* SQL
* Продуктовые метрики
* Статистика и теория вероятностей
* Power BI
А на сколько вопросов вы смогли ответить правильно? 😏
👍5❤2
🔥 5 ошибок при составлении резюме
Чтобы привлекать внимание рекрутеров, нужно не только много уметь, но еще и «вкусно» это преподнести 🙂
Сегодня вместе с онлайн-университетом SF Education обсудили 5 типичных ошибок, которые встречаются в большинстве резюме.
Например:
✅ Старайтесь максимально указывать инструменты и технологии, с которыми вы работаете
Посудите сами - вариант «До»:
- Создание аналитической системы для отдела маркетинга
Вариант «После»:
+ Разработал аналитическую систему на основе Power BI и Airflow + Python + PostgreSQL в качестве хранилища
Остальные пункты читайте в карточках 😏
- - - - -
Кстати, о том, как «вкусно» упаковать свое резюме, подробно и с примерами мы рассказали в статье 👉🏻 https://vk.cc/cbvYHr
Чтобы привлекать внимание рекрутеров, нужно не только много уметь, но еще и «вкусно» это преподнести 🙂
Сегодня вместе с онлайн-университетом SF Education обсудили 5 типичных ошибок, которые встречаются в большинстве резюме.
Например:
✅ Старайтесь максимально указывать инструменты и технологии, с которыми вы работаете
Посудите сами - вариант «До»:
- Создание аналитической системы для отдела маркетинга
Вариант «После»:
+ Разработал аналитическую систему на основе Power BI и Airflow + Python + PostgreSQL в качестве хранилища
Остальные пункты читайте в карточках 😏
- - - - -
Кстати, о том, как «вкусно» упаковать свое резюме, подробно и с примерами мы рассказали в статье 👉🏻 https://vk.cc/cbvYHr
👍3🔥2❤1
🔥 CHANGELOG.md - IT Resume [Февраль]
Февраль хоть и короткий месяц, но мы много чего успели:
0. Готовим кое-что новое и крутое 😉
1. Упростили процедуру регистрации — теперь не придется городить сложные пароли
2. Исправили 50+ багов по задачам, добавили новые разборы и решения
3. Добавили несколько задач и тестовых заданий с собеседований
А также:
+ Тот самый Глеб Михайлов застримил у нас со своими леопардами 👉🏻 https://vk.cc/cbz2Hn
+ Собрали почти 30К просмотров и 100 комментариев на Хабре и все это на одной статье 👉🏻 https://vk.cc/cbz2OY
Stay tuned! 🙂
Февраль хоть и короткий месяц, но мы много чего успели:
0. Готовим кое-что новое и крутое 😉
1. Упростили процедуру регистрации — теперь не придется городить сложные пароли
2. Исправили 50+ багов по задачам, добавили новые разборы и решения
3. Добавили несколько задач и тестовых заданий с собеседований
А также:
+ Тот самый Глеб Михайлов застримил у нас со своими леопардами 👉🏻 https://vk.cc/cbz2Hn
+ Собрали почти 30К просмотров и 100 комментариев на Хабре и все это на одной статье 👉🏻 https://vk.cc/cbz2OY
Stay tuned! 🙂
🔥4👍2
💥Тотальный код ревью - разбираем решение на Python
Рассмотрим задачу:
Дан массив целых чисел
Пример:
Дано:
Кстати, попробуйте решить задачку сами 👉 https://vk.cc/cbz9ba
✅ Решение, которое предложил пользователь:
1. Избавимся от range
Начнем немного с конца. В последнем цикле пользователь предлагает цикл по
В целом, это логично - длина массивов
Сцепим два списка с помощью
2. Избавимся от лишних циклов
Вообще говоря, столько циклов тут и не нужно. Пользователь сначала пробегает по первой части списка, занося нужные элементы в новый список
Сходу в голову приходят 2 варианта:
- Пробежаться в цикле 1 раз и добавить проверку
1 вариант:
2 вариант:
Так давайте избавимся от них с помощью слайсинга и функции
3. Наведем красоту
Помимо исправлений по коду, несколько замечаний про внешнее оформление кода.
— Задание массивов лучше не растягивать на 3 строки, а оформить в виде одной:
Рассмотрим задачу:
Дан массив целых чисел
nums размерности 2n. Элементы массива расположены в следующем порядке: [x1, x2, ..., xn, y1, y2, …, yn]. Необходимо преобразовать массив к виду [x1, y1, x2, y2, …, xn, yn].Пример:
Дано:
nums = [2, 5, 1, 3, 4, 7], n = 3
Результат: [2, 3, 5, 4, 1, 7]
Давайте разберем решение одного из пользователей нашей платформы и сделаем его тотальный код-ревью. Кстати, попробуйте решить задачку сами 👉 https://vk.cc/cbz9ba
✅ Решение, которое предложил пользователь:
class Answer:Отметим, что поставленную задачу этот код действительно решает. Однако многое тут можно оптимизировать.
def shuffle(self, nums, n):
p = []
p1 = []
tot = []
for i in nums[0:n]:
p.append(i)
for i in nums[n:]:
p1.append(i)
for i in range(len(p)):
tot.append(p[i])
tot.append(p1[i])
return tot
1. Избавимся от range
Начнем немного с конца. В последнем цикле пользователь предлагает цикл по
i с помощью range(len(p)). В целом, это логично - длина массивов
p и p1 одинаковая, так что ошибок здесь нет. Но это же код на Python - давайте перепишем его на питонячем!Сцепим два списка с помощью
zip и проитерируем по ним одновременно. А чтобы пополнить список tot на очередной итерации, просто используем «+=». for el1, el2, in zip(p, p1):Можете проверить - результат будет такой же.
tot += [el1, el2]
2. Избавимся от лишних циклов
Вообще говоря, столько циклов тут и не нужно. Пользователь сначала пробегает по первой части списка, занося нужные элементы в новый список
p. Далее он делает аналогично с p1. Сходу в голову приходят 2 варианта:
- Пробежаться в цикле 1 раз и добавить проверку
if
- Сцепить 2 подмассива1 вариант:
for i, el in enumerate(nums):Тут у нас опять 2 массива. Чтобы от них избавиться, можно заглядывать «немного вперед»:
if i < n:
p.append(el)
else:
p1.append(el)
for i, el in enumerate(a):Но и тут как будто что-то не то. Немного смущают индексы.
if i < n:
tot += [el, a[i+n]]
2 вариант:
Так давайте избавимся от них с помощью слайсинга и функции
zip:for a, b in zip(nums[:n], nums[n:]):Вот это уже получше. Мы сразу избавились от 2 лишних циклов и от 2 дополнительных списков.
tot += [a, b]
3. Наведем красоту
Помимо исправлений по коду, несколько замечаний про внешнее оформление кода.
— Задание массивов лучше не растягивать на 3 строки, а оформить в виде одной:
p, p1, tot = [], [], []
— Между некоторыми блоками кода есть 2 пустые строки. Это не соответствует PEP8👍20