2017-06-06 75 views
0

我有一个包含一个包含三个子查询的查询:结合多个MySQL子查询到一个

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 

我试图提高速度和它看起来像三个子查询组合成一个会是个好理念。

我的问题是,我不确定是否有可能从单个子查询输出多个值......以及如何去编写单个查询。我怀疑这将涉及IFCASEWHEN,但我不确定......

+0

请发表SHOW CREATE TABLE语句和一些示例数据,这将使我们能够帮助您 – FMashiro

+1

我不相信您需要任何子查询。只有一个加入条件聚合。 –

回答

1

尝试:

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 

如果需要其他列只是你需要的表连接这一点。注意保持该组完整无误,以免产生错误的值。

对于这个特定的解决方案,我给你甚至不需要左连接,因为该表没有任何内容。这只是一个提醒。如果您仍然无法弄清楚整个解决方案,请告诉我,我将使用它进行编辑。