尝试为我的SQL查询找到更好的写作

  • 本文关键字:更好 SQL 查询 sql
  • 更新时间 :
  • 英文 :


我有一个已发布网站页面的数据库,包含以下字段:

date| publisher_id | platform | page_views

平台是页面显示的平台(Mobile OR Desktop)

我需要写一个SQL查询,将满足以下要求:

对于每个拥有移动流量的发行商(发行商可以只在桌面平台上发布,只在移动平台上发布,或者两者都有),找出该发行商在所有平台上的总页面浏览量。

我尝试了接下来的步骤:

  1. 创建新列-case when "platform"='Mobile' then 1 else 0 end user_has_mobile_traffic
  2. 将表作为子查询,如果他有mobile_traffic
  3. ,则按publisher_id和indicator分组。
  4. 然后我得到了所有拥有移动流量的发行商的列表
  5. 在原始表中,如果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

最新更新