🔥 Разбираем что такое CPA!
Сегодня мы рассмотрим одну из ключевых метрик в мире маркетинга -
🤔 CPA vs CAC
Многие компании путают эти два показателя и используют их взаимозаменяемо для обозначения маркетинговых затрат, связанных с привлечением новых клиентов. Тем не менее,
1️⃣
2️⃣
⚙️ Как рассчитать CPA
Чтобы рассчитать
На маркетинговое сотрудничество с инфлюенсерами было потрачено 10000. Привлеченные клиенты - 1000.
Если одним из ваших основных каналов привлечения являются медиа, то расчет
🔴 Недостатки
Поскольку
📌 А какой CPA хороший?
Это один из тех вопросов, на который нельзя ответить конкретным числом, как и в других метриках. Чтобы понять, что считается хорошим
1. Ваша отрасль: что вы продаете? Еда, мода, фитнес-продукты, электроника и т. д.
2. CLV: Сколько стоит этот клиент после приобретения и сколько прибыли он приносит?
3. Частота повторных покупок: сколько покупок совершают существующие клиенты по сравнению с новыми.
4. Средняя продолжительность жизни клиента.
5. CR: Сколько ваших клиентов в конечном итоге отменят подписку или просто перестанут покупать у вас?
💎 Бенчмарки
Cредний
Лучший способ определить, ниже ли нормального ваш CPA, выше или просто средний, - это сравнить его с внутренним эталоном - вашим LTV.
❗️Дополнительно
Иметь очень низкий
👉 Приходите в наш Симулятор «Аналитик данных», чтобы понимать, как работать с бизнес-метриками, как их считать с помощью разных инструментов (Python, SQL) и как их правильно анализировать!
#продуктовые_метрики
Сегодня мы рассмотрим одну из ключевых метрик в мире маркетинга -
CPA (общая стоимость привлечения нового клиента по определенному каналу или кампании). CPA позволяет оценить эффективность маркетинговых кампаний и определить, сколько стоит привлечение одного нового клиента. 🎯🤔 CPA vs CAC
Многие компании путают эти два показателя и используют их взаимозаменяемо для обозначения маркетинговых затрат, связанных с привлечением новых клиентов. Тем не менее,
CPA и CAC технически отличаются:1️⃣
CPA относится только к маркетинговой стоимости, чтобы потенциальный клиент предпринял действие, которое приведет к конверсии. Эта конверсия не обязательно завершается покупкой. Это может быть подписка на новостную рассылку или загрузка электронной книги или отправка формы лида, независимо от вашей цели конверсии.2️⃣
CAC же относится к маркетинговым и другим затратам на привлечение клиентов в больших масштабах. Другие затраты - это стоимость используемых инструментов маркетинга, затраты поставщика рекламы, заработную плату команды и расходы агентства. ⚙️ Как рассчитать CPA
Чтобы рассчитать
CPA, просто разделите общую стоимость на количество новых клиентов, привлеченных по тому же каналу/кампании.($) общая сумма, потраченная на привлечение новых клиентов по определенному каналу или кампанииПример
/
(#) новые клиенты, привлеченные по тому же каналу или кампании
=
($) Стоимость приобретения
На маркетинговое сотрудничество с инфлюенсерами было потрачено 10000. Привлеченные клиенты - 1000.
CPA = 10000 / 1000 = 10
🟢 ПреимуществаЕсли одним из ваших основных каналов привлечения являются медиа, то расчет
CPA полезен для определения эффективности ваших кампаний. Чем ниже ваш CPA по отношению к вашему LTV, тем выше будет ваша прибыль.🔴 Недостатки
Поскольку
CPA является достаточно конкретной метрикой, важно также отслеживать другие более общие показатели (ROI, LTV, коэффициент конверсии и т. д.), чтобы получить полную картину всех маркетинговых усилий по отношению к доходу, который они генерируют.📌 А какой CPA хороший?
Это один из тех вопросов, на который нельзя ответить конкретным числом, как и в других метриках. Чтобы понять, что считается хорошим
CPA, следует учитывать многие факторы:1. Ваша отрасль: что вы продаете? Еда, мода, фитнес-продукты, электроника и т. д.
2. CLV: Сколько стоит этот клиент после приобретения и сколько прибыли он приносит?
3. Частота повторных покупок: сколько покупок совершают существующие клиенты по сравнению с новыми.
4. Средняя продолжительность жизни клиента.
5. CR: Сколько ваших клиентов в конечном итоге отменят подписку или просто перестанут покупать у вас?
💎 Бенчмарки
Cредний
CPA составляет 59,18 - 60,76 долларов. Например, для приложений дейтинга CPA составляют 6.91 доллар, а для отрасли права и медицины - более 126 долларов.Лучший способ определить, ниже ли нормального ваш CPA, выше или просто средний, - это сравнить его с внутренним эталоном - вашим LTV.
❗️Дополнительно
Иметь очень низкий
CPA не всегда хорошо. Это может означать, что вы не инвестируете достаточно, чтобы расти. Лучше установите некоторую цель CPA в контексте вашего соотношения LTV:CAC, чтобы вы достигли такого CPA, который достаточно низок, чтобы расти прибыльно, но не так низок, чтобы расти недостаточно быстро.👉 Приходите в наш Симулятор «Аналитик данных», чтобы понимать, как работать с бизнес-метриками, как их считать с помощью разных инструментов (Python, SQL) и как их правильно анализировать!
#продуктовые_метрики
🔥8❤2
🔥 Экономим память при работе с Pandas
Сегодня мы хотим поделиться с вами полезным советом в работе с
По умолчанию
🟢 Пример
Создадим DataFrame с помощью
Мы точно должны что-то с этим сделать! Вообще, для диапазона от 1 до 100, нам вполне будет достаточно типа
🔵 Видите, простое преобразование типов данных может значительно сократить использование памяти. Это особенно полезно, когда мы имеем дело с огромными объемами данных и хотим оптимизировать производительность.
#pandas
Сегодня мы хотим поделиться с вами полезным советом в работе с
Pandas. Обычно на обучении говорят, что важно следить за типами данных в столбцах, но для новичков это может быть непонятно. Особенно когда речь идет о борьбе за оптимизацию использования памяти. Поэтому, мы покажем вам, почему это важно и как справиться с этой задачей.По умолчанию
Pandas всегда назначает своим столбцам наивысший возможный тип данных, вне зависимости от диапазона значений в столбце. Но всегда нужно стремиться оптимизировать эти типы, приводить их к удобному виду для отображения и оптимальному по памяти.🟢 Пример
Создадим DataFrame с помощью
Pandas и NumPy, используя случайно сгенерированные целые значения от 1 до 100:import pandas as pdТеперь, чтобы узнать, сколько места занимает столбец 'A', мы можем использовать метод
import numpy as np
df = pd.DataFrame(
np.random.randint(1, 100,
size=(10**7, 2)),
columns=["A", "B"])
info() для этого столбца:df['A'].info()Как видим, тип данных этого столбца -
# dtypes: int64(1)
# memory usage: 76.3 MB
int64, и занимает он - 76.3 МБ памяти. Это очень прилично!Мы точно должны что-то с этим сделать! Вообще, для диапазона от 1 до 100, нам вполне будет достаточно типа
int8. Так и сделаем, преобразуем столбец:df['A'] = df['A'].astype(np.int8)После преобразования давайте снова проверим информацию о столбце 'A':
df['A'].info()Теперь тип данных столбца 'A' -
# dtypes: int8(1)
# memory usage: 9.5 MB
int8, и занимает он всего 9.5 МБ памяти. Это значительное сокращение используемой памяти по сравнению с исходным значением.🔵 Видите, простое преобразование типов данных может значительно сократить использование памяти. Это особенно полезно, когда мы имеем дело с огромными объемами данных и хотим оптимизировать производительность.
#pandas
🔥14👍5❤1
🔥 Когда пригодится SELF JOIN?
Как часто вы используете соединение таблицы с самой собой? Это не часто встречающаяся практика. Но на самом деле
1️⃣ Поиск пробелов
Имеется таблица
Иногда необходимо найти места, так называемых пробелов в значениях. В нашем случае - число, с которого этот разрыв начинается. Например, у нас есть строки:
2️⃣ Поиск дублирующихся строк
Допустим, таблица
Для поиска дублирующихся строк на основе конкретного столбца, например
3️⃣ Ранжирование
Имеем таблицу
Чтобы назначить определенное место каждому спортсмену мы снова соединим таблицу саму с собой.
💥 Есть еще множество необычных вещей, на которые способен
#sql
Как часто вы используете соединение таблицы с самой собой? Это не часто встречающаяся практика. Но на самом деле
self join помогает решить удивительно большой список задач. Давайте посмотрим!1️⃣ Поиск пробелов
Имеется таблица
foo (см. Карточку 1)Иногда необходимо найти места, так называемых пробелов в значениях. В нашем случае - число, с которого этот разрыв начинается. Например, у нас есть строки:
1, 4, 9 - разрывы здесь это 2-3, 5-8. И нам нужно получить первое число каждого разрыва, то есть 2 и 5. И для этого мы можем соединить таблицу саму с собой.2️⃣ Поиск дублирующихся строк
Допустим, таблица
foo теперь содержит имена, фамилии и почту клиентов. (см. Карточку 2)Для поиска дублирующихся строк на основе конкретного столбца, например
email, можно использовать тот же подход:3️⃣ Ранжирование
Имеем таблицу
player. (см. Карточку 3)Чтобы назначить определенное место каждому спортсмену мы снова соединим таблицу саму с собой.
💥 Есть еще множество необычных вещей, на которые способен
self join, о которых мы вам еще расскажем. Но сначала поделитесь, приходилось ли вам использовать подобные конструкции в своей работе? Может быть у вас есть свои лайфхаки? Пишите в комментариях!#sql
🔥10👍4❤1
🔍 Целостность данных при merge в Pandas
Когда мы объединяем две таблицы в Pandas, очень важно убедиться, что все пройдет без ошибок. Например, если один из двух датафреймов имеет повторяющиеся ключи, это приведет к дублированию строк, чего мы, скорее всего, не хотим.
Но есть решение! У метода
🔹 Объединение с Уникальными Ключами (One-to-One Merge)
При таком объединении ключи должны быть уникальными в обеих таблицах. Давайте посмотрим на пример:
Если в одной из таблиц есть повторяющиеся ключи,
-
-
-
-
И Pandas выдаст ошибку слияния, если
✅ Это поможет вам предотвратить ошибки, которые часто могут остаться незамеченными.
#python #pandas
Когда мы объединяем две таблицы в Pandas, очень важно убедиться, что все пройдет без ошибок. Например, если один из двух датафреймов имеет повторяющиеся ключи, это приведет к дублированию строк, чего мы, скорее всего, не хотим.
Но есть решение! У метода
merge() есть параметр validate, который проверяет, имеет ли merge определенный тип.🔹 Объединение с Уникальными Ключами (One-to-One Merge)
При таком объединении ключи должны быть уникальными в обеих таблицах. Давайте посмотрим на пример:
import pandas as pdВсе получилось и мы не получим никакой ошибки:
df1 = pd.DataFrame({
'colA': ['A', 'B', 'C'],
'colB': [1, 2, 3]})
df2 = pd.DataFrame({
'colA': ['A', 'B', 'C'],
'colC': [4, 5, 6]})
# ключи уникальны
result = pd.merge(df1, df2,
on='colA',
validate='one_to_one')
print(result)
colA colB colC🔹 Обработка Повторяющихся Ключей
0 A 1 4
1 B 2 5
2 C 3 6
Если в одной из таблиц есть повторяющиеся ключи,
merge выдаст ошибку:import pandas as pdРезультат:
df1 = pd.DataFrame({
'colA': ['A', 'B', 'C'],
'colB': [1, 2, 3]})
df2 = pd.DataFrame({
'colA': ['A', 'B', 'B'],
'colC': [4, 5, 6]})
# повторяющиеся ключи:
'colA': ['A', 'B', 'C'] и
'colA': ['A', 'B', 'B']
try:
result = pd.merge(df1, df2,
on = 'colA',
validate='one_to_one')
except pd.errors.MergeError as e:
print(f"Ошибка: {e}")
Ошибка объединения: Merge keys are not unique in right dataset; not a one-to-one merge🔹 Какие еще есть объединения?
-
one_to_one: Ключи должны быть уникальными в обоих датафреймах-
one_to_many: Ключи должны быть уникальными в левом датафрейме.-
many_to_one: Ключи должны быть уникальными в правом датафрейме.-
many_to_many: Ключи могут быть уникальными, а могут и не быть в обоих датафреймахИ Pandas выдаст ошибку слияния, если
merge не соответствует указанному типу.✅ Это поможет вам предотвратить ошибки, которые часто могут остаться незамеченными.
#python #pandas
👍20🔥8❤1
🔥 Знакомимся с новым помощником Pandas
Часто бывает, что мы используем неоптимизированные методы обработки, что снижает производительность кода и может привести к незамеченным ошибкам. Так что показываем вам в деле ассистента
Он работает как компаньон, давая предложения/предупреждения о ваших шагах по обработке данных. Давайте посмотрим!
📥 Как установить?
Просто выполните следующую команду:
🟣 Что может Dovpanda
Пример 1
🟢 Зная эти рекомендации, мы можем сделать код более оптимизированным и чистым. Успехов! 🎉
Pandas - самая популярная библиотека для анализа данных! Но не всем студентам (по опыту) эта библиотека дается легко. Поэтому хотим познакомить вас с новым помощником - Dovpanda!Часто бывает, что мы используем неоптимизированные методы обработки, что снижает производительность кода и может привести к незамеченным ошибкам. Так что показываем вам в деле ассистента
Dovpanda, который может давать подсказки и направления при работе с Pandas.Он работает как компаньон, давая предложения/предупреждения о ваших шагах по обработке данных. Давайте посмотрим!
📥 Как установить?
Просто выполните следующую команду:
pip install dovpanda> При импорте вы можете получить ошибку. Просто игнорируйте это и продолжайте работать с Pandas, как и работали бы. Предложения и подсказки будут работать.
import pandas as pd
import dovpanda
🟣 Что может Dovpanda
Пример 1
df = pd.DataFrame([[1,2],[3,4]], columns = ["A","B"])Пример 2
def apply_func(row):
pass
iter_df = df.iterrows()
# df.iterrows is not recommended.
# Essentially it is very similar to iterating the rows of the frames in a loop.
# In the majority of cases, there are better alternatives that utilize pandas' vector operation
merged_df = pd.concat((df, df))Пример 3
# All dataframes have the same columns and same number of rows.
# Pay attention, your axis is 0 which concatenates vertically
# After concatenation you have duplicated indices - pay attention
pd.read_csv("../some_dataset.csv")
# Dataframe has 1000 rows.
# Column Company_Name has only 15 values which suggests it's a categorical feature.
# After df is created, Consider converting it to categorical by using df['Company_Name'] = df['Company_Name'].astype('category')
Это лишь малая часть, еще больше подсказок можете посмотреть под постом.🟢 Зная эти рекомендации, мы можем сделать код более оптимизированным и чистым. Успехов! 🎉
🔥19👍6
💥 Решаем необычную задачку по SQL
На днях мы наткнулись на очень любопытную задачку и решили, что стоит решить её вместе с вами!
🟢 Условие
Нам дана таблица подписок, которая состоит из
Например, если период подписки
Пример входной таблицы и результата запроса смотрите на карточке 1 под постом
🔵 Решение
На первый взгляд понятно, что мы должны сравнить каждую подписку с каждой другой. Давайте рассмотрим даты начала и конца подписки
Тогда, если
- Начало = 2020-01-01
- Конец = 2020-01-31
- Начало = 2020-01-16
- Конец = 2020-01-26
Здесь мы видим, что
Алгоритм мы уже подобрали, но есть несколько нюансов:
- мы должны убедиться, что пользователь не сравнивается с его собственной подпиской;
- используем
Видим, что для каждого пользователя существует другой пользователь в случае, если даты совпадают. Для
Теперь, объединив все это вместе, мы можем сгруппировать по полю
📚 Интересная задача, согласитесь? Не часто встречаются соединения по неравенству. Вернее, use кейс встретить можно часто, но не всегда вспоминается, что так тоже можно! Если вдруг вы забыли о такой крутой опции - приглашаем в наш недавний пост про Non-Equi JOIN!
На днях мы наткнулись на очень любопытную задачку и решили, что стоит решить её вместе с вами!
🟢 Условие
Нам дана таблица подписок, которая состоит из
даты начала и окончания подписки для каждого пользователя. Нам нужно написать запрос, который возвращает true/false для каждого пользователя на основе совпадения дат с другими пользователями. Например, если период подписки
user1 совпадает с периодом подписки любого другого пользователя, запрос должен возвращать значение True для user1.Пример входной таблицы и результата запроса смотрите на карточке 1 под постом
🔵 Решение
На первый взгляд понятно, что мы должны сравнить каждую подписку с каждой другой. Давайте рассмотрим даты начала и конца подписки
UserA как startA и endA, и аналогично для UserB - startB и endB.Тогда, если
startA ≤ endB и endA ≥ startB, то мы можем сказать, что два диапазона дат перекрываются. Давайте возьмем два примера - сравним U1 и U2:- Начало = 2020-01-01
- Конец = 2020-01-31
- Начало = 2020-01-16
- Конец = 2020-01-26
Здесь мы видим, что
startA(2020-01-01) меньше, чем endB(2020-01-26), и аналогично, endA(2020-01-31) больше, чем startB(2020-01-16), и, следовательно, можно сделать вывод, что даты перекрывают друг друга. Аналогично, если сравнить U1 и U4 (из таблицы), условия не выполнятся и вернется значение false.Алгоритм мы уже подобрали, но есть несколько нюансов:
- мы должны убедиться, что пользователь не сравнивается с его собственной подпиской;
- используем
LEFT JOIN таблицы с самой собой, чтобы сопоставить пользователя с каждым другим пользователем, который удовлетворяет нашему условию.SELECT *Результат запроса смотрите на карточке 2 под постом 😉
FROM subnoscriptions AS s1
LEFT JOIN subnoscriptions AS s2
ON s1.user_id != s2.user_id
AND s1.start <= s2.end
AND s1.end >= s2.start
Видим, что для каждого пользователя существует другой пользователь в случае, если даты совпадают. Для
user1 есть 2 строки, указывающие на то, что он совпадает с 2 пользователями. А для user4 соответствующий id равен null, что указывает на то, что он не совпадает ни с каким другим пользователем.Теперь, объединив все это вместе, мы можем сгруппировать по полю
s1.user_id и просто проверить, существует ли какое-либо значение true для пользователя, где s2.user_id НЕ равен NULL.SELECT s1.user_id,Мы использовали
(CASE WHEN s2.user_id
IS NOT NULL THEN 1
ELSE 0 END) AS overlap
FROM subnoscriptions AS s1
LEFT JOIN subnoscriptions AS s2
ON s1.user_id != s2.user_id
AND s1.start <= s2.end
AND s1.end >= s2.start
GROUP BY s1.user_id
CASE чтобы присвоить 1 и 0 в зависимости от значения s2.user_id для данного пользователя. Конечный результат смотрите на карточке 3 под постом. 📚 Интересная задача, согласитесь? Не часто встречаются соединения по неравенству. Вернее, use кейс встретить можно часто, но не всегда вспоминается, что так тоже можно! Если вдруг вы забыли о такой крутой опции - приглашаем в наш недавний пост про Non-Equi JOIN!
🔥13❤4👍4
🔥 Супер-удобная функция Matplotlib
Это, должно быть, самая крутая вещь, которую мы когда-либо узнавали о
🤔 Обычно, для создания графиков мы используем метод
- это ограничивает нашу гибкость при создании макета;
- иногда получаются ошибки индексации и некоторые другие неловкости.
💡 Вместо этого мы можем использовать метод
Например, расположение строк:
- AB
- AC
Создаст три подграфика, в которых:
- подграфик
- подграфик
- подграфик
Затем создайте подграфик в определенной области, просто через доступ к словарю
#python #visualization
Это, должно быть, самая крутая вещь, которую мы когда-либо узнавали о
Matplotlib. 🤔 Обычно, для создания графиков мы используем метод
plt.subplots(). Но иногда это превращается в довольно громоздкие конструкции. А еще:- это ограничивает нашу гибкость при создании макета;
- иногда получаются ошибки индексации и некоторые другие неловкости.
💡 Вместо этого мы можем использовать метод
plt.subplot_mosaic(). Так, мы сможем создать график и расположить его как угодно, определив структуру графика простой строкой. Например, расположение строк:
- AB
- AC
Создаст три подграфика, в которых:
- подграфик
A будет занимать весь первый столбец- подграфик
B будет занимать верхнюю половину второго столбца- подграфик
C будет занимать нижнюю половину второго столбцаax = fig.subplot_mosaic("""AB
AC""")
ax['A'].plot(...) # область А
ax['B'].plot(...) # область B
ax['C'].plot(...) # область C
Результат смотрите под постомЗатем создайте подграфик в определенной области, просто через доступ к словарю
ax по ключу ('A', 'B' или 'C' ).type(ax)📌 Попробуйте вместе с нами!
dict
ax['A'].plot(...) # область А
ax['B'].plot(...) # область B
ax['C'].plot(...) # область C
import matplotlib.pyplot as pltСкажите, классная функция?! С помощью нее гораздо проще создавать дашборды 😉
import numpy as np
fig = plt.figure(
layout="constrained",
figsize = (8,6))
mosaic = """abc
add
eee"""
ax = fig.subplot_mosaic(mosaic)
x = np.linspace(0.1, 1, 10)
ax['a'].plot(x, np.sqrt(x))
ax['b'].scatter(x, x**2)
ax['c'].scatter(x, np.log(x))
ax['d'].bar([1,2,3,4,5],
[1,2,3,4,5])
ax['e'].hist(
np.random.normal(0,1, 100))
plt.show();
#python #visualization
🔥13😱7🤩5
Приглашаем к нам в команду - Технический автор / Методист 🔥
На связи Андрон, CEO IT Resume & Simulative. И сегодня я с хорошей новостью - мы расширяем команду и ищем крутого технического автора / методиста 🔥
Если коротко - ищем в команду человека, который будет заниматься созданием задач, уроков, статей, постов, автотестов по теме аналитики и программирования по всем нашим продуктам. Результаты вашей работы будут видеть тысячи человек каждый месяц - это очень вдохновляет 😍
🔗 Подробнее про вакансию и как откликнуться - по ссылке: https://merciful-cobra-6c3.notion.site/086bc4211c0f4fb38ea0cd2df6bd69bb?pvs=4
Желаю удачи и до скорой встречи у нас в команде 😉
На связи Андрон, CEO IT Resume & Simulative. И сегодня я с хорошей новостью - мы расширяем команду и ищем крутого технического автора / методиста 🔥
Если коротко - ищем в команду человека, который будет заниматься созданием задач, уроков, статей, постов, автотестов по теме аналитики и программирования по всем нашим продуктам. Результаты вашей работы будут видеть тысячи человек каждый месяц - это очень вдохновляет 😍
🔗 Подробнее про вакансию и как откликнуться - по ссылке: https://merciful-cobra-6c3.notion.site/086bc4211c0f4fb38ea0cd2df6bd69bb?pvs=4
Желаю удачи и до скорой встречи у нас в команде 😉
🔥5❤2🤩2
📚 Секреты с SQL собеседований: Изучаем констраинты в PostgreSQL!
Привет, друзья! Сегодня мы углубимся в мир
⭐️ Что такое констраинты в PostgreSQL?
Констраинты – это правила или ограничения, которые налагаются на данные в таблицах базы данных. Они гарантируют соблюдение определенных правил при вставке или изменении данных, помогая избежать ошибок и несогласованных значений.
🔍 Типы констраинтов
1. PRIMARY KEY (
2. FOREIGN KEY (
3. UNIQUE (
4. CHECK (проверка): Устанавливает условие, которое должно быть истинным для вставки или обновления данных в таблице.
Пример:
Вопросы о констраинтах часто задают на собеседованиях, чтобы убедиться, что вы хорошо разбираетесь в работе с БД и понимаете, как обеспечить целостность данных. И хотя аналитикам редко приходится формировать таблицы - это спрашивают практически на каждом собеседовании. А предупрежден - значит вооружен!
👉 Подготовиться к любому техническому собеседованию поможет Симулятор собеседования аналитика → задачи с собеседований в топовые компании, тестовые онлайн-собеседования, вопросы и кейсы и много другое!
#sql #interview_problems
Привет, друзья! Сегодня мы углубимся в мир
SQL и обсудим одну из важных тем – констраинты! Если вы готовитесь к собеседованию на должность, связанную с SQL, то обязательно стоит освоить эту тему. Констраинты в PostgreSQL помогают обеспечивать целостность данных и поддерживать ограничения, защищающие информацию.⭐️ Что такое констраинты в PostgreSQL?
Констраинты – это правила или ограничения, которые налагаются на данные в таблицах базы данных. Они гарантируют соблюдение определенных правил при вставке или изменении данных, помогая избежать ошибок и несогласованных значений.
🔍 Типы констраинтов
1. PRIMARY KEY (
первичный ключ): Обеспечивает уникальность значений в столбце и предотвращает ввод значения NULL.CREATE TABLE products (
product_no integer PRIMARY KEY,
name text,
price numeric
);
2. FOREIGN KEY (
внешний ключ): Связывает значения в столбце с значениями в другой таблице, обеспечивая ссылочную целостность данных.-- например создадим внешний ключ к прошлой таблице в таблице orders
CREATE TABLE orders (
order_id integer PRIMARY KEY,
product_no integer REFERENCES
products (product_no),
quantity integer
);
3. UNIQUE (
уникальный): Гарантирует уникальность значений в столбце. Причем, в отличие от PRIMARY KEY - не гарантирует отсутствие NULL-значений. Так как два NULL значения для PostgreSQL - различны 🙂CREATE TABLE products (
product_no integer UNIQUE,
name text,
price numeric
);
-- или для группы столбцов сразу
CREATE TABLE example (
a integer,
b integer,
c integer,
UNIQUE (a, c)
);
-- причем в таком формате,
уникальными должны быть только
сочетания этих столбцов, а
значения по отдельности
уникальными могут и не быть :)
4. CHECK (проверка): Устанавливает условие, которое должно быть истинным для вставки или обновления данных в таблице.
Пример:
CREATE TABLE products (🚀 Почему это важно для собеседований?
product_no integer,
name text,
price numeric CHECK (price > 0)
);
-- ограничили цену товара положительными значениями
Вопросы о констраинтах часто задают на собеседованиях, чтобы убедиться, что вы хорошо разбираетесь в работе с БД и понимаете, как обеспечить целостность данных. И хотя аналитикам редко приходится формировать таблицы - это спрашивают практически на каждом собеседовании. А предупрежден - значит вооружен!
👉 Подготовиться к любому техническому собеседованию поможет Симулятор собеседования аналитика → задачи с собеседований в топовые компании, тестовые онлайн-собеседования, вопросы и кейсы и много другое!
#sql #interview_problems
❤11👍7🔥7