美文网首页数据蛙数据分析每周作业
SQL多表查询思维总结2018-12-18

SQL多表查询思维总结2018-12-18

作者: yimengtianya1 | 来源:发表于2018-12-18 16:35 被阅读9次

一、需求背景
需求方给定了ID清单,要求获取ID清单上的其它指标数据。


需求样表

二、需求分析★
1、相关指标存在于三张表内,因此涉及联表查询。
2、需求方给定了ID清单,因此ID清单是基准表。
3、需求需要获取2个月的汇总数据,因此涉及聚合函数。


表字段分布
三、需求处理思想★★★
1、为了保证数据的准确性,因此ID清单是基准表,所有其他表均以user_id字段为基准,特别是在关联表时,均采用left join其它表。
2、为提高数据的计算速度,考虑到底层数据是以时间作为分区的,因此,联结的表均先进行子查询(按时间分区提取出来)再进行联结查询。

四、过程总结★★
1、一开始将聚合计算涉及的表当做了主表,过程中使用right join与inner join去联结其它表,导致逻辑关系比较复杂,容易出错。
2、一开始,直接联结其它表,导致系统计算迟迟无法完成,甚至报错。后期将直接联结表改为联结标的子查询,子查询内先行将所需分区的数据提取出来,此时不需要处理整张表,计算速度明显加快。
3、本次查询分别在Hive与Spark环境下处理,发现Spark速度明显优于Hive。


SELECT
a.user_id
,b.local1_name AS `城市`
,c.user_name AS `用户姓名`
,c.account_name AS `用户名`

--is_pm = 1推广的消息
,sum(case when a.cal_dt BETWEEN '2018-06-01' AND '2018-06-30' then a.vppv end) as `6月VPPV总`
,count(case when a.cal_dt BETWEEN '2018-06-01' AND '2018-06-30' and a.is_pm = 1 then info_id end) AS `6月推广消息量`

,sum(case when a.cal_dt BETWEEN '2018-07-01' AND '2018-07-31' then a.vppv end) as `7月VPPV总`
,count(case when a.cal_dt BETWEEN '2018-07-01' AND '2018-07-31' and a.is_pm = 1 then info_id end) AS `7月推广消息量`

FROM user_id_table d

    left join (select * from user_news_table where cal_dt BETWEEN '2018-06-01' AND '2018-07-31'  )a
      on a.user_id = d.user_id

    left join (select * from local_table where cal_dt BETWEEN '2018-06-01' AND '2018-07-31' )b
    on a.disp_area1=b.local1 AND a.cal_dt=b.cal_dt

    left  join (select * from customer_detail_daily where cal_dt BETWEEN '2018-06-01' AND '2018-07-31' )c
    on a.user_id = c.user_id AND a.cal_dt=c.cal_dt

where a.cal_dt BETWEEN '2018-06-01' AND '2018-07-31' 
group by a.user_id,b.local1_name,c.user_name,c.account_name

相关文章

  • SQL多表查询思维总结2018-12-18

    一、需求背景需求方给定了ID清单,要求获取ID清单上的其它指标数据。 二、需求分析★1、相关指标存在于三张表内,因...

  • SQL多表查询总结

    前言 连接查询包括合并、内连接、外连接和交叉连接,如果涉及多表查询,了解这些连接的特点很重要。只有真正了解它们之间...

  • SQL多表查询高级应用

    SQL多表查询 多表连接示范 两张表t_user t_judge 给两张表设置外键约束查询内容 SQL多表查询 多...

  • SQLAlchemy(四)

    知识要点: 1.多表查询 2.原生SQL的查询 多表查询 在MySQL中我们讲了多表查询,在SQLAlchemy中...

  • 不可置信!SQL 优化终于干掉了“distinct”

    sql 优化之多表联合查询干掉 “distinct” 去重关键字 所以需要把多表的子查询的 sql 结构进行优化。...

  • sql

    sql语句 查询 简单查询 例: 多表连接查询 例: 2.更新

  • sql多表查询

    普通多表查询 嵌套多表查询 链接多表查询 左链接(会将左表的内容全部输出,没有需要补NULL) 右链接(会将右表的...

  • SQL多表查询

    之前做过一个关于数据库的使用总结,里面写过一些关于数据库的常用方法的集合,但是我们在实例工作中,很可能涉及到一需要...

  • sql多表查询

    在面试中经常有这样的问题,从两个表A和B中获取有特定关系的数据.碰到这样的问题我们一般需要用到union和join...

  • sql多表查询

    sql会创建多表以及多表的关系 需求: 上篇文章中的商品表和分类表之间存在着所属关系,在数据库如何表示这种关系 分...

网友评论

    本文标题:SQL多表查询思维总结2018-12-18

    本文链接:https://www.haomeiwen.com/subject/ekulkqtx.html