sql开窗函数排序_sql查询慢的优化步骤

sql开窗函数排序_sql查询慢的优化步骤SQL面试两板斧:自连接+窗口函数今天梳理SQL练习题,发现有两类经典问题,恰好也是数据分析师面试时,SQL提问的经典场景。现整理为3道小例题,使用自己创建的很简单的数据表,旨在将思路说清楚,希望对大家有启发。(1)自连接问题①

SQL面试两板斧:自连接+窗口函数   今天梳理SQL练习题,发现有两类经典问题,恰好也是数据分析师面试时,SQL提问的经典场景。现整理为3道小例题,使用自己创建的很简单的数据表,旨在将思路说清楚,希望对大家有启发。   (1)自连接问题   ① 每组第一名   假设有一个商品表mygoods,里面有:商品id(good_id),类型(class),价格(price),状态(status)。现在问:如何找到每个类型(class)中,价格最高的商品?
sql开窗函数排序_sql查询慢的优化步骤
sql开窗函数排序_sql查询慢的优化步骤原表mygoods-数据都是瞎编的   我提供的方法是:(自连接)   如何来理解呢?这里的重点思维是这几个:1. bb表是辅助表,aa表是主表2. 内层子查询中,where语句效果其实等同于join语句,是连接的一种古老写法3. 按组class自连接,形成每组不同商品的笛卡尔乘积4. 用反向思维,bb中,count(*)表示影响的行数。每组最大,所以,辅助表中比它大的≤15. 根据影响行数要求,过滤出主表aa中的部分行   ② 找同事问题   如下表所示,是学生信息表student。问题的本质就是:找到和【张雅】同一学科的所有同学姓名。
sql开窗函数排序_sql查询慢的优化步骤
sql开窗函数排序_sql查询慢的优化步骤原表student-数据还是瞎编的   两种写法,本质上是一样的,只是join的方式不同。这里的关键原理是:用学科作为连接键,自连接,形成笛卡尔积。   记住这个例子,这种问题称为【找同事问题】:首先根据学科进行自联结,能形成每一学科下,不同学生的组合,由于是笛卡尔乘积,所以,每一学科,组合数一共是学生个数的平方种组合。然后,你随便定义一个学生姓名,就可以引出和他相同学科的所有学生。   比如,我们取出来看看:(这里,想要干净清爽,就可以select b.s_name即可!)
sql开窗函数排序_sql查询慢的优化步骤
sql开窗函数排序_sql查询慢的优化步骤运行的结果(右侧挡住了无法显示完全!但是意思不影响)   (2)窗口函数   当然,由于只有hive支持窗口函数,这里仅限hive哈。但是,在电商公司,经常喜欢提问此类问题,举例如下。   题目:SQL中,表user_time中字段是user_id,time(用户访问时间),求每个用户相邻两次浏览时间之差小于三分钟的次数,只用说思路。   看起来很复杂,但是这里为了清晰,分开几步来写了,思路很清晰:   先排序:首先是user_id,然后是time,排序后增加辅助列–每次浏览时上一次的时间;然后增加标签列–判断是否间隔3分钟,是则为1,否则0;最后,对辅助列聚合,按每个客户来统计次数之和。   这个方法应该不是最好的方法,但是我觉得思路很典型;当然,具有一定的SAS的风格,没办法,SAS用多了,哈哈。   通过3道例题,希望能起到抛砖引玉的作用,皆为自己的原创和尝试,若能给大家一点启发,再好不过了!

2024最新激活全家桶教程,稳定运行到2099年,请移步至置顶文章:https://sigusoft.com/99576.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。 文章由激活谷谷主-小谷整理,转载请注明出处:https://sigusoft.com/43132.html

(0)
上一篇 2024年 9月 6日
下一篇 2024年 9月 6日

相关推荐

关注微信