简体   繁体   中英

Combining multiple MySQL subqueries into one

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM