SQL Notes | BiliBili Internship - 代理商对应品牌消耗聚合+一些思考

需求背景:统计 2025 年 3 月份,每个“代理商”(entity_name)对应的、与其有关联的品牌所产生的消耗总金额,并将结果按代理商分组输出。

具体逻辑:

  1. 子查询 a:筛选有访问且品牌有效的代理商–品牌映射
  2. 主查询 join:把子查询 a 和券金额表 b 关联起来
  3. 聚合

知识点:Inner Join 的性质:取交集

回顾:

left join:交集数据写入共同列,左表叉集数据留null

outer join:交集数据写入共同列,左表叉集数据留null,右表叉集数据留null

* 其实写多了会觉得,如果用集合论的知识来理解join这个操作就会变得很好理解很好后续举一反三,为啥这么说呢,不同的join对应取不同的集合部分,然后join本身这个操作其实就是可以拿文式图理解,交集处两个表的数据都有,叉集处只有自己表的数据,对方表的数据为null,然后不同的join就是拿这三块拼图中不同的部分,就像left join就是拿左表叉集和交集,right join同理,outer join就是三块拼图全拿,inner join就是拿交集。

* 同时你完全可以构造出其中的映射关系,也就是交集到叉集的映射,作为连接的字段就是自变量,其他的字段就是因变量,一一映射,都是双射,这样就能很完备的去形象的理解join到底是在干什么,以及如何发挥出join的核心作用。

SELECT
  a.entity_name,
  round(sum(b.amount), 2)
from
  (
    SELECT
      entity_name,
      bdata_brand_name
    FROM
      bi_sycpb.bdata_common_user_total_stat_i_d
    WHERE
      log_date between '20250301' and '20250331'
      and subject_type = '代理商'
      and visit_cnt > 0
      and bdata_brand_name != '不限'
      and entity_name != ''
    group by
      entity_name,
      bdata_brand_name
  ) a
  inner join tmp_sycpb.zps_ads_crm_coupon_category_commerce_kpi_amount_data_a_d b on a.entity_name = b.agent_customer_name
  and a.bdata_brand_name = b.product_name
where 
  b.amount_date between '20250301' and '20250331'
group by
  a.entity_name

全部评论

相关推荐

驼瑞驰_招募评论官版...:点击就挂,露头就秒
点赞 评论 收藏
分享
程序员小白条:这比例牛逼,750:1
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务