我有一个已发布网站页面的数据库,包含以下字段:
date| publisher_id | platform | page_views
平台是页面显示的平台(Mobile OR Desktop)
我需要写一个SQL查询,将满足以下要求:
对于每个拥有移动流量的发行商(发行商可以只在桌面平台上发布,只在移动平台上发布,或者两者都有),找出该发行商在所有平台上的总页面浏览量。
我尝试了接下来的步骤:
- 创建新列-
case when "platform"='Mobile' then 1 else 0 end user_has_mobile_traffic
- 将表作为子查询,如果他有mobile_traffic ,则按publisher_id和indicator分组。
- 然后我得到了所有拥有移动流量的发行商的列表
- 在原始表中,如果publisher_id在列表中,我已经做了,然后求和page_views
你觉得怎么样?有没有更简单的方法,或者我的方法已经足够好了?
谢谢!
您可以不使用IN (<sub-query>)
,通过使用HAVING
子句来减少扫描表的次数。
SELECT
publisher_id,
SUM(page_views)
FROM
your_table
GROUP BY
publisher_id
HAVING
MAX(CASE WHEN platform = 'Mobile' THEN 1 ELSE 0 END) = 1