Я готовлюсь к собеседованию на следующей неделе, в котором есть небольшой компонент анализа данных. Рекрутер дал мне следующий пример SQL-вопроса, из-за которого у меня возникли проблемы с решением проблемы. Я надеюсь, что я не откусываю больше, чем могу жевать;) ..
ОБРАЗЕЦ ВОПРОСА:
Вам даны две таблицы:
Таблица AdClick (столбцы: ClickID, AdvertiserID, UserID и другие
поля) и AdConversion Table (столбцы: ClickID, UserID и другие
поля).
Вы должны найти общий коэффициент конверсии (количество конверсий / количество
клики) для пользователей одним кликом, двумя кликами и т. д.
Я играл с этим около часа и продолжаю преодолевать дорожные блоки. Я понимаю COUNT и GROUP BY, но подозреваю, что мне не хватает простой функции SQL, о которой я не знаю. Это также затрудняет мне поиск любых возможных указателей / решений через Google: незнание магических ключевых слов для поиска.
Пример ввода
dbo.AdConversion
----------------
ClickID UserID
1 1
2 1
4 1
5 3
6 2
7 2
12 1
9 4
10 4
dbo.AdClick
-----------
ClickID AdvertiserID UserID
1 1 1
2 2 1
3 1 2
4 1 1
5 1 3
6 2 2
7 3 2
8 1 1
9 4 4
10 2 4
11 3 4
12 2 1
Expected Result:
----------------
UserClickCount ConversionRate
4 80.00%
2 66.67%
1 100.00%
Объяснение / уточнение:
Пользователи с 4 AdConversion.ClickIDs (также известные как «Конверсии») имеют 80% беседы.
Здесь есть только один пользователь, UserID 1, который имеет 5 AdClicks с 4 AdConversion.
Пользователи с 2 конверсиями имеют 6 конверсий с 4 конверсиями для коэффициента конверсии 66,67%. Здесь это будут UserID 2 и 4.
Пользователи с 1 конверсией, здесь только UserID 3, имеют 1 конверсию против 1 AdClick для 100% конверсии.
Вот одно из возможных решений, которое я нашел после некоторого указания из комментария Зака. Я не могу себе представить, что это идеальное решение или в нем есть ошибки или нет:
DECLARE @Conversions TABLE
(
UserID int NOT NULL,
AdConversions int
)
INSERT INTO @Conversions (UserID, AdConversions)
SELECT adc.UserID, COUNT(adc.UserID)
FROM dbo.AdConversion adc
GROUP BY adc.UserID;
DECLARE @Clicks TABLE
(
UserID int NOT NULL,
AdClicks int
)
INSERT INTO @Clicks(UserID, AdClicks)
SELECT UserID, Count (ClickID)
FROM dbo.AdClick
GROUP BY UserID;
SELECT co.AdConversions, CONVERT(decimal(6,3), (CAST(SUM(co.AdConversions) AS float) / SUM(cl.AdClicks))) * 100
FROM @Conversions co
INNER JOIN @Clicks cl
ON co.UserID = cl.UserID
GROUP BY co.AdConversions;
Любой совет будет с благодарностью!
Спасибо,
Michael