今天面了众安保险的数据分析岗,感觉很顺利,但是拢共就面了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 中,查询语句的执行顺序通常是按照以下步骤进行的:
需要注意的是,虽然这是一般情况下的执行顺序,但在实际执行过程中,数据库系统可能会对查询进行优化和重排,以提高性能。
2、表连接方式有哪些及其区别?
在 SQL 中,连接是用于联合两个或多个表的操作,以便获取相关的数据。有几种连接方式,主要包括 INNER JOIN、LEFT JOIN(或 LEFT OUTER JOIN)、RIGHT JOIN(或 RIGHT OUTER JOIN)和 FULL JOIN(或 FULL OUTER JOIN)。以下是它们的主要区别:
在实际应用中,选择连接方式取决于你需要的结果。如果你只想获取两个表中匹配的行,可以使用 INNER JOIN。如果你想保留左表中的所有行,并且将右表中匹配的行加入,可以使用 LEFT JOIN。同样,RIGHT JOIN 是保留右表中的所有行,而 FULL JOIN 保留两个表中的所有行。
连接操作可以根据数据之间的关系和业务需求来选择,因此了解不同连接方式的特点对于写出准确的 SQL 查询语句是很重要的。
3、sql题,表A和表B,a.id = b.id ,保留两表的所有字段,用哪种连接方式?若没有共同的字段,用什么连接?union 和 union all的区别?
在MySQL中,FULL JOIN
语法是不支持的,但你可以通过使用LEFT JOIN
和RIGHT JOIN
的组合来模拟FULL JOIN
的效果。FULL JOIN
可以获取左表和右表中的所有行,并将它们组合在一起,缺失的值用NULL填充。这在MySQL中可以通过UNION
和LEFT 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 JOIN
从tableA
获取所有行,然后使用UNION
操作符将结果与RIGHT JOIN
从tableB
获取的所有行组合在一起。这样就模拟了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中,有几种不同的方法可以去重,具体取决于你的数据和需要。以下是一些常见的去重方式:
这些是一些SQL中常见的去重方式,选择合适的方法取决于你的数据结构、需求和性能考虑。
6、窗口函数有哪些
窗口函数(Window Functions)是一种SQL中强大的工具,用于在查询结果集中执行聚合、分析和计算操作。下面是一些常见的窗口函数:
这些窗口函数可以在SELECT语句的SELECT列表、ORDER BY子句和GROUP BY子句中使用,并且通常与OVER子句一起使用,以定义窗口的边界和排序规则。窗口函数提供了强大的功能,可以在查询结果中进行复杂的分析和处理。