У меня есть база данных MySql с такими таблицами:
PageviewEvents:
pageviewId | eventId | eventValue | eventTime
SessionPageviews:
id | sessionId | page
PageviewEvents.pageviewId - это ссылка на SessionPageviews.id как внешний ключ.
Когда мне нужно выбрать некоторые данные по eventId, я использую этот запрос:
SELECT
sp.page as Page, count(*)
from PageviewEvents pe
left join SessionPageviews sp on sp.id = pe.pageviewId
where pe.eventId = 1
GROUP by sp.page
order BY 2 DESC
И получите таблицу, подобную этой:
page | count_of_event_1
Но теперь мне нужно выбрать больше данных:
page | count_of_event_1 | count_of_event_2 ... | count_of_event_N
Я начал с 2 событий и попытался сделать что-то вроде белого:
SELECT
sp.page as Page,
(SELECT count(*) from PageviewEvents pe1 left join SessionPageviews sp1 on sp1.id = pe1.pageviewId where pe1.eventId = 1 and sp1.page = sp.page) as count_of_event_1,
(SELECT count(*) from PageviewEvents pe1 left join SessionPageviews sp1 on sp1.id = pe1.pageviewId where pe1.eventId = 2 and sp1.page = sp.page) as count_of_event_2
from PageviewEvents pe
left join SessionPageviews sp on sp.id = pe.pageviewId
where pe.eventId = 1 OR pe.eventId = 2
GROUP by sp.page
order BY 2 DESC
Когда я запускаю этот запрос на удаленном сервере, он зависает.
Есть ли ошибки в моем запросе? Как это оптимизировать?