I have MySql database with such tables:
PageviewEvents:
pageviewId | eventId | eventValue | eventTime
SessionPageviews:
id | sessionId | page
PageviewEvents.pageviewId is a refers to SessionPageviews.id as foreign key.
When I need to select some data by eventId, I use this query:
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
And get a table like this:
page | count_of_event_1
But now I need to select more data:
page | count_of_event_1 | count_of_event_2 ... | count_of_event_N
I started with 2 events and tried to white something like this:
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
When I run this query on remote server, it freezes.
Are there any errors in my query? How to optimize it?