将多个MySQL子查询合并为一个

时间:2017-06-06 13:28:53

标签: 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,但我不确定......

1 个答案:

答案 0 :(得分: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

如果您需要其他列,只需将其与您需要的表格连接即可。请注意保持组完整,不要生成错误的值。

对于这个特定的解决方案,我给你甚至不需要左连接,因为该表中没有任何内容。这只是一个抬头。如果您仍然无法弄清楚整个解决方案让我知道,我会用它进行编辑。