众安保险数据分析实习生面试

今天面了众安保险的数据分析岗,感觉很顺利,但是拢共就面了20min,还是有点没底

更新一下:过啦,当天下午三点面 五点就通知通过了!! 效率真高。

面试流程:

1.自我介绍

2.过去实习中影响最深刻的一个项目

3.两个简单的SQL,口述就行

部门表(员工姓名、部门、薪资) 取出每个部门的最高薪资、平均薪资、总薪资

用户表(用户id、登陆时间) 取出每天每个用户第二次登录的记录(我用窗口函数做的)

4.给我介绍了一下公司业务、部门构成、以及实习生的日常工作

5.反问

我反问了是按项目开展工作还是职能 答:职能

感觉很顺利,但是拢共就面了20min,还是有点没底

面试很简单,面试前做了一些准备也附上:

1、sql的执行顺序

FROM - ON - JOIN - WHERE - GROUP BY - WITH - HAVING - SELECT - DISTINCT - ORDER BY - LIMIT

在 SQL 中,查询语句的执行顺序通常是按照以下步骤进行的:

  1. FROM:首先,从指定的表(或视图)中获取数据,这是查询的基本数据源。
  2. WHERE:然后,根据 WHERE 子句中的条件筛选出满足条件的行。
  3. GROUP BY:如果查询包含 GROUP BY 子句,则将结果按照指定的列进行分组。
  4. HAVING:在分组后,根据 HAVING 子句中的条件筛选出满足条件的分组。HAVING 子句可以被认为是 WHERE 子句针对分组后的结果的过滤器。
  5. SELECT:选择要检索的列,并且对数据进行计算、转换等操作。
  6. DISTINCT:如果查询包含 DISTINCT 关键字,则去除结果集中重复的行。
  7. ORDER BY:按照指定的列对结果集进行排序。
  8. LIMIT / OFFSET:如果使用了 LIMIT 或 OFFSET 子句,最后根据这些子句来限制结果集的大小或移动结果集的起始位置。

需要注意的是,虽然这是一般情况下的执行顺序,但在实际执行过程中,数据库系统可能会对查询进行优化和重排,以提高性能。

2、表连接方式有哪些及其区别?

在 SQL 中,连接是用于联合两个或多个表的操作,以便获取相关的数据。有几种连接方式,主要包括 INNER JOIN、LEFT JOIN(或 LEFT OUTER JOIN)、RIGHT JOIN(或 RIGHT OUTER JOIN)和 FULL JOIN(或 FULL OUTER JOIN)。以下是它们的主要区别:

  1. INNER JOIN:INNER JOIN 返回两个表中符合连接条件的行。如果某一行在其中一个表中没有匹配行,则该行不会包含在结果中。
  2. LEFT JOIN (或 LEFT OUTER JOIN):LEFT JOIN 返回左表中的所有行,以及右表中符合连接条件的行。如果在右表中没有匹配的行,则结果集中右侧的列将包含 NULL 值。
  3. RIGHT JOIN (或 RIGHT OUTER JOIN):RIGHT JOIN 返回右表中的所有行,以及左表中符合连接条件的行。如果在左表中没有匹配的行,则结果集中左侧的列将包含 NULL 值。
  4. FULL JOIN (或 FULL OUTER JOIN):FULL JOIN 返回左右两个表中的所有行,如果在其中一个表中没有匹配的行,则另一个表中对应的列将包含 NULL 值。

在实际应用中,选择连接方式取决于你需要的结果。如果你只想获取两个表中匹配的行,可以使用 INNER JOIN。如果你想保留左表中的所有行,并且将右表中匹配的行加入,可以使用 LEFT JOIN。同样,RIGHT JOIN 是保留右表中的所有行,而 FULL JOIN 保留两个表中的所有行。

连接操作可以根据数据之间的关系和业务需求来选择,因此了解不同连接方式的特点对于写出准确的 SQL 查询语句是很重要的。

3、sql题,表A和表B,a.id = b.id ,保留两表的所有字段,用哪种连接方式?若没有共同的字段,用什么连接?union 和 union all的区别?

在MySQL中,FULL JOIN语法是不支持的,但你可以通过使用LEFT JOINRIGHT JOIN的组合来模拟FULL JOIN的效果。FULL JOIN可以获取左表和右表中的所有行,并将它们组合在一起,缺失的值用NULL填充。这在MySQL中可以通过UNIONLEFT JOIN以及RIGHT JOIN来实现。以下是一个示例:

sqlCopy codeSELECT *
FROM tableA
LEFT JOIN tableB ON tableA.id = tableB.id
UNION
SELECT *
FROM tableA
RIGHT JOIN tableB ON tableA.id = tableB.id

这个查询首先使用LEFT JOINtableA获取所有行,然后使用UNION操作符将结果与RIGHT JOINtableB获取的所有行组合在一起。这样就模拟了FULL JOIN的效果。需要注意的是,UNION会自动去除重复的行,如果需要保留所有行,则可以使用UNION ALL

如果没有共同的字段,你可以使用CROSS JOIN连接方式。CROSS JOIN会返回两个表的笛卡尔积,即两个表的所有可能组合。

sqlCopy codeSELECT *
FROM tableA
CROSS JOIN tableB;

但请注意,CROSS JOIN会返回非常大的结果集,特别是当两个表都很大时,它可能会导致性能问题。因此,在使用CROSS JOIN时,务必要仔细考虑数据量的大小和性能影响。

union与union all的区别在于,union 进行去重,而union all不去重

4、sql去重方式有哪些?

在SQL中,有几种不同的方法可以去重,具体取决于你的数据和需要。以下是一些常见的去重方式:

  1. DISTINCT关键字:使用SELECT语句与DISTINCT关键字一起,可以从结果集中去除重复的行。
  2. GROUP BY子句:使用GROUP BY子句,将相同的值聚合到一起,并且可以结合聚合函数如COUNT、SUM等使用。
  3. 使用子查询:通过在SELECT语句中使用子查询,可以选择不重复的行。
  4. 使用ROW_NUMBER()窗口函数:使用ROW_NUMBER()函数可以为每一行分配一个唯一的数字,然后可以根据这个数字过滤出不重复的行。
  5. 使用UNION或UNION ALL操作符:如果你有两个或多个表,想要将它们的结果合并并去重,可以使用UNION或UNION ALL操作符。UNION会自动去除重复的行,而UNION ALL会保留所有行。

这些是一些SQL中常见的去重方式,选择合适的方法取决于你的数据结构、需求和性能考虑。

6、窗口函数有哪些

窗口函数(Window Functions)是一种SQL中强大的工具,用于在查询结果集中执行聚合、分析和计算操作。下面是一些常见的窗口函数:

  1. ROW_NUMBER():为结果集中的每一行分配一个唯一的数字。
  2. RANK():为结果集中的每一行分配一个排名,相同的值将获得相同的排名,但是会跳过相同排名数量。
  3. DENSE_RANK():与RANK()类似,但是不会跳过相同排名数量,排名是连续的。
  4. NTILE(n):将结果集划分为n个相等大小的桶,并为每个桶中的行分配一个桶号。
  5. LEAD(column, offset, default):获取当前行之后第offset个行的值。
  6. LAG(column, offset, default):获取当前行之前第offset个行的值。
  7. FIRST_VALUE(column):获取分组中第一行的指定列的值。
  8. LAST_VALUE(column):获取分组中最后一行的指定列的值。
  9. SUM(), AVG(), COUNT(), MIN(), MAX():这些聚合函数也可以用作窗口函数,用于在窗口内执行聚合操作而不是整个结果集。
  10. PERCENT_RANK():为结果集中的每一行计算百分比排名。
  11. CUME_DIST():计算当前行在整个分组中的累积分布百分比。
  12. PERCENTILE_CONT():计算分组中指定百分位数的近似值。
  13. LAG() OVER (PARTITION BY ... ORDER BY ...):在指定分区内根据指定顺序获取前一行的值。
  14. LEAD() OVER (PARTITION BY ... ORDER BY ...):在指定分区内根据指定顺序获取后一行的值。

这些窗口函数可以在SELECT语句的SELECT列表、ORDER BY子句和GROUP BY子句中使用,并且通常与OVER子句一起使用,以定义窗口的边界和排序规则。窗口函数提供了强大的功能,可以在查询结果中进行复杂的分析和处理。

全部评论
感谢佬
2 回复 分享
发布于 2024-02-27 18:05 湖南
请问一下这个岗位是日常实习吗
1 回复 分享
发布于 2024-03-09 15:33 湖北
请问数据分析和暑期实习与日常实习除了留任有什么区别呀
点赞 回复 分享
发布于 2024-04-03 16:15 新加坡
大佬!
点赞 回复 分享
发布于 2024-04-02 17:58 上海

相关推荐

04-11 00:51
已编辑
门头沟学院 Java
先说一下楼主的情况:双非本大三,两段实习,javaer,想要找一个暑期大厂offer,努力了两个月,三月份每天的状态就是算法,八股,项目,四月份更是一个面试没有,最终还是没有结果,心碎了一地。期间面了一些中小厂,大厂只有腾讯约面,其他大厂都投了一遍,但是还是石沉大海。再看一下楼主的面试结果吧,就不说ttl了腾讯s3:三面挂csig:一面挂teg:三面挂wxg:一面挂没错,面了八次腾讯,两次三面挂,当时真的心都碎了。其他中小厂都有面,有的没过,有的oc,但是都没有去。其他大厂投了简历,但是不是简历挂,就是测评挂,都说今年行情好很多,各大厂都扩招,可是问题出在那里呢?学历背景吗?实习经历吗?还是简历不够好看?依稀记得,从年初七就离开了家里,回到学校,早早准备面试,当时自己认为凭借着自己的两段实习经历,以及大二就开始准备的八股算法,拿大厂offer不是问题,但是还是不敢放松,回校的状态每天就是算法,八股,还有查看各种招聘信息,想着尽早投机会多,但是事实证明,投的早,不如投的刚刚好。当时想着,先投一些中小厂开始面试,找找面试感觉,从2.10就开始有面试了,基本都是线下面试,面试的感觉都很不错,觉得自己的状态慢慢回来了,期间也有oc一些中小厂,但是自己的目标并不在此,只是想练一下手,遂拒。后面投了腾讯的暑期实习基地,不久就约面了,第一次面这么大的厂,多少有点紧张,好在运气还不错,遇到的面试官也比较好,一直干到了三面,期间看牛客有不少说一面就挂了的,感觉自己还是比较幸运的,但是没想到倒在了三面,一周后就挂了,伤心是有的,但是想到这才刚刚开始,还有很多机会,便继续准备下一次面试了,很快,被另外一个部门捞了,一进会议,面试官没开摄像头,看网上说没开摄像头很多都是kpi,但是自己给自己打气,认为面试官只是不方便开摄像头罢了,面完,感觉良好,没问什么很难得问题,基本都答出来了,算法两道也a了一道,感觉实习不会这么严格吧?还是过了一会挂了,因为这个?还是技术不太匹配?面试过程中说搞C++的,心想,搞c++的你面我干啥?唉,这时候有点气馁,然后就接下来半个月没有面试。这时已经是三月底了,看到牛客好多人都已经陆陆续续拿到了offer,看人家的面试准备也没那么早,有0实习的,有没刷算法的,有两个面的,,,唉,反正是一言难尽啊,感觉努力没有什么意义,面试多半是看面试官的感觉,主观性很大啊,只要你技术没有太大的问题。第三次面试腾讯,面试来的比较突然,期间已经有几天没看八股什么的了,临时看了一下之前自己做的面试笔记,但是面试却异常顺利,三天闯到了三面,自己也不敢相信,三面玩感觉也良好,脑子里不得不想着一些“offer结算画面”,但是过了一会查看流程显示“流程终止”,我?哎,当时真的有苦说不出啊,也是一晚没睡。后面就逐渐开始褪去大厂梦了,看着曾经跟自己交流的牛油,朋友,认识的人,觉得他们技术不太如你,算法刷的没你多,进了大厂,但是这又如何呢?能力强不强不是你了说了,面试官说了算。也逐渐知道,不是你能力好就可以了,还得有运气,运气,运气。这个过程太累了,和自己和解吧,不用非得大厂,找个合适一点的就好,放轻松一点。今天有点心事睡不着,闲着想写一些自己的面试过程,勿喷。附上一张面试的情况,公司就不方便透露了。
怒卷的斯科特:八分运气两分实力
点赞 评论 收藏
分享
评论
39
149
分享

创作者周榜

更多
牛客网
牛客企业服务