У меня есть сценарий, где люди могут делать action1 и выручать; или action1 & action2 & выйдут, или они могут сделать action1, action2 &, а затем сказать «Я хочу играть больше». Я хочу, чтобы найти число людей на каждом уровне:
- ли действие1
- ли действие1 и action2
- ли ДЕЙСТВИЙ1 и Мотор2, а также сказал: «Я хочу играть больше»SQL для анализа воронки
Каждый раз, когда пользователь делает действие , мы регистрируем sessionId. Поэтому, если использование запускает действие 1 и действие 2, у нас будет две строки с одинаковым идентификатором сеанса, одинаковым идентификатором клиента и другими действиями.
╔══════════════════════════════════════╦════════════════╦════════╗
║ SessionId ║ FirstRunAction ║ UserId ║
╠══════════════════════════════════════╬════════════════╬════════╣
║ 039af321-457e-41a6-b303-41ca935b0877 ║ action_1 ║ eb6 ║
║ 039af321-457e-41a6-b303-41ca935b0877 ║ action_2 ║ eb6 ║
╚══════════════════════════════════════╩════════════════╩════════╝
Данные, указанные выше, приведены в одной таблице. Action1 и action2 находятся в таблице UserAction, но «Я хочу играть больше» находится в отдельной таблице, называемой «Play».
Я сделал следующее, но это не правильно.
Я хочу иметь логику типа if. Искать действие 2 только тогда, когда действие 1 есть & поиск «Я хочу играть больше», когда на этой сессии также есть action1 и action2. Я написал один ниже, но не знаю, как хранить результаты на любом уровне &, если то, что я делаю, является правильным. У меня есть 6 миллионов данных для начала. Любая помощь?
Action1Results = SELECT [SessionId]
,[Action]
,[UserId]
FROM [Test].[dbo].[UserAction]
WHERE [Action] = 'action_1';
Action2Results = SELECT [SessionId]
,[Action]
,[UserId]
FROM [Test].[dbo].[UserAction]
WHERE [Action] = 'action_2';
PlayMoreResults = SELECT [SessionId]
,[Play]
,[UserId]
FROM [Test].[dbo].[UserPlay]
WHERE [Play] = 'I want to play more';
FinalResults = SELECT [SessionId]
,[UserId]
FROM [Test].[dbo].[Action] with (nolock)
INNER JOIN [Test].[dbo].[UserPlay] with (nolock)
ON [Test].[dbo].[UserPlay].SessionId = [Test].[dbo].[Action].SessionId;
На самом деле может быть много действий, но они всегда будут заканчиваться _1 и _2. Список действий может меняться со временем.
E.g. У меня могут быть такие действия, как:
«Write_1», «Write_2», «Birds_1», Birds_2 »,« Pen_1 »,« Pen_2 ».
Так что для них я должен видеть, как много сделал
'Write_1" -> "Write_2" -> 'Я хочу играть больше'',
то сколько сделал
'Birds_1" -> "Birds_2" -> 'Я хочу играть больше'',
то сколько сделал
'Pen_1" -> "Pen_2" -> 'Я хочу играть больше''
и так далее. Так что воронка для каждого типа.
Просьба представить более подробную информацию. Какой db вы используете MySQL или SQLserver? – davejal
честный вопрос @davejal кроме [dbo] kinda отдает его (сервер MS Sql) :) –
Спасибо, Хуан. На самом деле может быть много действий, но они всегда будут иметь _1 и _2. Список действий может меняться со временем. Например. У меня могут быть такие действия, как «Write_1», «Write_2», «Birds_1», «Birds_2», «Pen_1», «Pen_2». Поэтому для этого мне нужно посмотреть, сколько из них «Write_1» -> «Write_2» -> «Я хочу играть больше», а затем сколько «Birds_1» -> «Birds_2» -> «Я хочу играть больше», ', то сколько же «Pen_1» -> «Pen_2» -> «Я хочу играть больше» и т. д. Так что воронка для каждого типа. – SweetNeetu