当前位置: 首页 > 科技观察

如果你想通过数据科学面试,你必须掌握这十个SQL概念

时间:2023-03-15 19:18:06 科技观察

SQ是一种数据库查询和编程语言,用于访问数据和查询、更新和管理关系数据库系统。很多人为了通过面试精心准备,每一个角落都不敢放过。但事实上,大多数公司在现实生活中的面试中只测试了他们的几个核心概念。努力学习不如聪明学习,下面这10个概念最常出现,因为它们有最实际的应用。在准备面试时,您应该主要关注这些概念。1.CASEWHEN许多问题可能需要使用CASE-WHEN语句,因为这个概念非常通用。当根据其他变量给某个值或类赋值时,我们需要使用CASE-WHEN来编写复杂的条件语句。但有一个鲜为人知的功能可用于数据透视。例如,如果您已经有一个“月(month)”列并且想为每个月创建一个单独的列,则可以使用CASEWHEN语句来透视数据。示例问题:编写一个SQL查询来重新排列表格样式,使每个月对应一个收入列。Initialtable:+------+--------+------+|id|revenue|month|+------+----------+-------+|1|8000|一月||2|9000|一月||3|10000|二月||1|7000|二月||1|6000|三月|+------+--------+--------+结果表:+------+------------+------------+------------+-----+------------+|id|Jan_Revenue|Feb_Revenue|Mar_Revenue|...|Dec_Revenue|+------+------------+------------+-------------+-----+------------+|1|8000|7000|6000|...|null||2|9000|null|null|...|null||3|null|10000|null|...|null|+------+------------+-------------+------------+-----+------------+2。必须记住SELECTDISTINCTSELECTDISTINCT语句,将SELECTDISTINCT语句与聚合函数一起使用是很常见的(这是第三个概念)。例如,如果您有一个客户订单表,您可能需要计算每个客户的平均订单数。在此示例中,您需要计算订单总数除以客户总数。像这样:SELECTCOUNT(order_id)/COUNT(DISTINCTcustomer_id)asorders_per_custFROMcustomer_orders3.聚合函数聚合函数与上一点密切相关,需要深入了解此类函数的作用,如min,max,sum,count等等...您应该很好地理解GROUPBY和HAVING子句。我强烈建议你花一些时间解决实际问题,我们经常以一些创造性的方式使用聚合函数。示例问题:编写SQL查询以在名为Person的表中查找所有重复的电子邮件。+----+--------+|Id|Email|+----+--------+|1|a@b.com||2|c@d.com||3|a@b.com|+----+--------+答案:SELECTEmailFROMPersonGROUPBYEmailHAVINGcount(Email)>14。Leftjoinvsinnerjoin对于SQL的新手,或者有一段时间没有使用SQL的人来说,很容易混淆left和innerjoin。确保你清楚地了解每个连接如何导致不同的结果,许多面试问题会要求你建立几个连接。在某些情况下,选择一个而不是另一个可能是成功与失败之间的区别。5.自连接SQL自连接是指将表与自身连接起来。听起来没什么用,但实际上非常有用。在很多实际应用中,数据都存储在一张大表中,而不是很多小表中,我们需要自连接来解决具体问题。示例问题:给定以下Employee表,编写SQL查询以查找收入高于其经理的员工。在表中,Joe是唯一收入高于经理的员工。+----+--------+--------+----------+|Id|姓名|工资|ManagerId|+----+-------+--------+----------+|1|乔|70000|3||2|亨利|80000|4||3|Sam|60000|NULL||4|Max|90000|NULL|+----+--------+------+------------+答案:SELECTa.NameasEmployeeFROMEmployeeasaJOINEmployeeasbona.ManagerID=b.IdWHEREa.Salary>b.Salary6。子查询子查询也称为内部查询或嵌套查询,是查询中的查询,将嵌入到WHERE子句中,可以解决需要顺序查询以产生给定结果的特殊问题。子查询和WITHAS语句在查询中用的比较多,一定要掌握。示例问题:假设一个网站包含两个数据表,Customers表和Orders表。编写SQL查询以查找所有从未订购过的客户。表:客户。+----+------+|Id|姓名|+----+------+|1|Joe||2|Henry||3|Sam||4|Max|+----+--------+Table:Orders.+----+------------+|Id|CustomerId|+----+------------+|1|3||2|1|+----+------------+答案:SELECTNameasCustomersFROMCustomersWHEREIdNOTIN(SELECTCustomerIdFROMOrders)7.字符串格式化字符串函数非常重要,尤其是在处理不清楚的数据时。公司可能会查看您的字符串的格式和处理方式,以确保您了解如何处理数据。字符串格式化包括以下内容:LEFT,RIGHTTRIMPOSITIONSUBSTRCONCATUPPER,LOWERCOALESCE8.Datetimehandling你肯定会遇到一些涉及日期时间数据的SQL问题,可能需要按月对数据进行分组,或者对变量进行分组格式为从DD-MM-YYYY转换为简单月份。需要了解的函数:EXTRACTDATEDIFF示例问题:给定一个Weather表,编写一个SQL查询来查找所有温度高于前一天(昨天)的DateId。+--------+----------------+----------------+|Id(INT)|RecordDate(DATE)|Temperature(INT)|+--------+----------------+-------------------+|1|2015-01-01|10||2|2015-01-02|25||3|2015-01-03|20||4|2015-01-04|30|+--------+----------------+------------------+答案:SELECTa.IdFROMWeathera,WeatherbWHEREa.Temperature>b.TemperatureANDDATEDIFF(a.RecordDate,b.RecordDate)=19。窗口函数窗口函数可以让你对所有行进行聚合值而不是只返回一行(这就是GROUPBY语句的作用),这对于行排序、累积计算和其他需求非常有用。示例问题:编写查询以获取最高薪水empno,确保解决方案可以处理该关系。depname|empno|salary|------------+--------+------+develop|11|5200|develop|7|4200|develop|9|4500|develop|8|6000|develop|10|5200|personnel|5|3500|personnel|2|3900|sales|3|4800|sales|1|5000|sales|4|4800|Answer:WITHsal_rankAS(SELECTempno,RANK()OVER(ORDERBYsalaryDESC)rnkFROMsalaries)SELECTempnoFROMsal_rankWHERErk=1;10.UNIONUNION不常出现,但偶尔会有人问到这一点,以防万一你还需要知道。如果你有两个具有相同列的表并想将它们合并,那么UNION就可以派上用场。如果您不是100%确定该怎么做,请及时使用搜索引擎解决。掌握这10个概念,你就能答对大部分面试题了。祝你面试顺利!