I have a query that contains that contains three sub queries:
select
*,
(select count(*) from v2_page_views left join v2_pages on v2_page_views.pageID=v2_pages.pageID where v2_page_views.siteID=1 and userID=v2_users.userID and pageTemperature=0) cold,
(select count(*) from v2_page_views left join v2_pages on v2_page_views.pageID=v2_pages.pageID where v2_page_views.siteID=1 and userID=v2_users.userID and pageTemperature=1) warm,
(select count(*) from v2_page_views left join v2_pages on v2_page_views.pageID=v2_pages.pageID where v2_page_views.siteID=1 and userID=v2_users.userID and pageTemperature=2) hot
from v2_page_views
left join v2_users on v2_page_views.userID=v2_users.userID
I am trying to improve the speed and it seems like combining the three sub queries into one would be a good idea.
My issue is that I am unsure whether it's even possible to output multiple values from a single sub query ... and how I would go about writing a single query. I suspect it will involve IF
, CASE
and WHEN
but I am unsure ...
Try:
select v2_page_views.columnThatIsId
sum(case when pageTemperature=0 then 1 else 0 end) cold,
sum(case when pageTemperature=1 then 1 else 0 end) warm,
sum(case when pageTemperature=2 then 1 else 0 end) hot
from v2_page_views
left join v2_users
on v2_page_views.userID=v2_users.userID
where v2_page_views.siteID=1
group by v2_page_views.columnThatIsId
If you need other columns just join this with the table you need. Be aware to maintain the group by intact to not generate wrong values.
To this specific solution I gave you wont even need the left join because there is nothing from that table. This is just a heads up. If you are still unable to figure out the whole solution let me know, I will edit with it.
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.