SQL查询优化:统计存在移动端流量的发布商全平台总页面浏览量
问题解答
思路合理性判断
你的实现逻辑是完全正确的,能准确拿到符合要求的结果,只是步骤稍显冗余,需要两次扫描原数据表,数据量较大时查询性能会有影响。
更简便的实现方案
不需要子查询嵌套、回表匹配,直接一次分组聚合即可得到结果,查询效率更高:
SELECT publisher_id, SUM(page_views) AS total_page_views FROM 替换为你的实际表名 GROUP BY publisher_id -- 筛选出存在移动端流量的发布商 HAVING MAX(CASE WHEN platform = 'Mobile' THEN 1 ELSE 0 END) = 1
逻辑说明
按publisher_id分组后,HAVING条件会判断每个发布商的所有记录中是否存在platform为Mobile的条目:只要存在任意一条移动端记录,MAX函数的返回值就为1,就会保留该分组,直接对分组内所有平台的page_views求和即可得到全平台总浏览量。
如果你的数据库支持BOOL_OR这类聚合函数(比如PostgreSQL、BigQuery),还可以把HAVING条件写得更简洁:
HAVING BOOL_OR(platform = 'Mobile')
内容的提问来源于stack exchange,提问作者Legendary
相关产品推荐
相关产品推荐

