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

全部评论

相关推荐

07-12 20:55
武汉大学 Java
程序员小白条:熟悉 Java、Python、Go 全能选手,这实习还是线上2个月,呃呃呃,没啥用,整个简历写的很差,也就是9爷的学历了
点赞 评论 收藏
分享
白火同学:先说结论,准大三不是特别好找实习,boss沟通300+没有实习是很正常的情况。一是暑期实习时间太短了,二是在这么多准大四都找不到实习,从实习时间和掌握技术层面,企业会优先看他们。 再说简历,其实985本+准大三到这水平的简历也很优秀了,要说的话,项目经历可以再优化一下,可以基本围绕采取STAR原则,分为项目概述、技术架构、技术亮点、实现结果,再发给AI润色一下。 最后说操作,准大三的话,如果想找实习那就多投,不过现在也7月中旬了,时间上已经略晚了。如果7月底实在找不到,也可以多刷点算法,多学点技术,这实习也不至于一定得有,当然有更好。
点赞 评论 收藏
分享
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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