我有一个包含三个子查询的查询:
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
我正在努力提高速度,似乎将三个子查询合并为一个是个好主意。
我的问题是我不确定是否可以从单个子查询中输出多个值...以及我将如何编写单个查询。我怀疑它会涉及IF
,CASE
和WHEN
,但我不确定......
答案 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
如果您需要其他列,只需将其与您需要的表格连接即可。请注意保持组完整,不要生成错误的值。
对于这个特定的解决方案,我给你甚至不需要左连接,因为该表中没有任何内容。这只是一个抬头。如果您仍然无法弄清楚整个解决方案让我知道,我会用它进行编辑。