目录

  • 背景
  • 步骤
  • 175组合两个表(多表联查)
  • 176 177 第n高的薪水(Distinct关键字 排序)
  • 178分数排名 (排序 order over关键字)
  • 179 连续出现的数字 (模拟多张表联查)
  • 181. 超过经理收入的员工 (两表联查)
  • 182 查找重复的电子邮箱(group by)
  • 183 从不订购的客户(两表联查)
  • 184部门最高工资员工(两表联查 max函数 )
  • 196删除重复的电子邮箱(group not in)
  • 197上升温度(datediff)
  • 511 游戏玩法分析
  • 总结


背景

虽然现在chatGPT很大程度上满足了大家的需要,但是写sql还是咱们程序员必不可少的部分啊
于是我参加了这次SQL集训。下面就让我们看看有什么题给我留下了很深的印象吧。

步骤

175组合两个表(多表联查)

1、多表联查

leetcode题集训 sql_数据分析

`

SELECT p.FirstName, p.LastName,a.City,a.State
FROM person p  left JOIN address  a
ON p.personid = a.personid

176 177 第n高的薪水(Distinct关键字 排序)

掌握Distinct关键字

编写一个SQL查询来报告 Employee 表中第 n 高的工资。如果没有第 n 个最高工资,查询应该报告为 null 。

leetcode题集训 sql_SQL_02

CREATE FUNCTION getNthHighestSalary(N INT) RETURNS INT
BEGIN
  RETURN (
       select (
          select distinct salary from (
              select salary, dense_rank() over (order by salary desc) rnk from employee
          )t
          where rnk=N
      )getNthHighestSalary
      
  );
END

178分数排名 (排序 order over关键字)

编写 SQL 查询对分数进行排序。排名按以下规则计算:

分数应按从高到低排列。
如果两个分数相等,那么两个分数的排名应该相同。
在排名相同的分数后,排名数应该是下一个连续的整数。换句话说,排名之间不应该有空缺的数字。

leetcode题集训 sql_SQL_03

select score,dense_rank() over (order by score desc) as 'rank'
from Scores

179 连续出现的数字 (模拟多张表联查)

编写一个 SQL 查询,查找所有至少连续出现三次的数字。

返回的结果表中的数据可以按 任意顺序 排列。

查询结果格式如下面的例子所示:

leetcode题集训 sql_sql_04


有点不是很明白

# Write your MySQL query statement below

SELECT DISTINCT l1.Num AS ConsecutiveNums 
FROM Logs AS l1, Logs AS l2, Logs AS l3
WHERE l1.id=(l2.id +1) AND l2.id = (l3.id+1) AND l1.Num = l2.Num AND l2.Num = l3.Num

where 后是三张表进行联查,因为说了是连续 l1.id=(l2.id +1) AND l2.id = (l3.id+1),说了是数字相等 l1.Num = l2.Num AND l2.Num = l3.Num

181. 超过经理收入的员工 (两表联查)

编写一个SQL查询来查找收入比经理高的员工。

leetcode题集训 sql_SQL_05

select 
    e1.name as `Employee`
from 
Employee e1
join   Employee  e2
on    e1.managerId = e2.id and e1.salary >e2.salary

182 查找重复的电子邮箱(group by)

leetcode题集训 sql_leetcode_06

编写一个 SQL 查询来报告所有重复的电子邮件。 请注意,可以保证电子邮件字段不为 NULL。

select Email from (
    select  Email,count(Id)as num
    from person
    group by Email
)as tmp 
where tmp.num >1

183 从不订购的客户(两表联查)

leetcode题集训 sql_算法_07


某网站包含两个表,Customers 表和 Orders 表。编写一个 SQL 查询,找出所有从不订购任何东西的客户。

select Name  Customers  
from Customers  c 
 left join Orders o  
 on   o.CustomerId = c.Id 
where o.Id is null

184部门最高工资员工(两表联查 max函数 )

编写SQL查询以查找每个部门中薪资最高的员工。

按 任意顺序 返回结果表。

leetcode题集训 sql_算法_08

select 
    d.Name as Department,
    e.Name as Employee,
    e.Salary 
from 
    Employee e,Department d 
where
    e.DepartmentId=d.id 
    and
    (e.Salary,e.DepartmentId) in (select max(Salary),DepartmentId from Employee group by DepartmentId);

196删除重复的电子邮箱(group not in)

编写一个 SQL 删除语句来 删除 所有重复的电子邮件,只保留一个id最小的唯一电子邮件。

以 任意顺序 返回结果表。 (注意: 仅需要写删除语句,将自动对剩余结果进行查询)

leetcode题集训 sql_数据分析_09

DELETE 
from Person 
Where Id not in (
    Select Id 
    From(
        Select MIN(Id) as id
        From Person 
        Group by Email
   ) t
)

197上升温度(datediff)

编写一个 SQL 查询,来查找与之前(昨天的)日期相比温度更高的所有日期的 id 。

leetcode题集训 sql_数据分析_10

select w1.id id
from weather w1
where w1.temperature > (
    select w2.temperature
    from weather w2
    where datediff(w1.recordDate, w2.recordDate) = 1
)

511 游戏玩法分析

写一条 SQL 查询语句获取每位玩家 第一次登陆平台的日期。

leetcode题集训 sql_算法_11

select player_id,min(event_date) first_login
from activity
group by player_id

总结

虽然练习sql有很多好处,但是我们不得不意识到chatGPT就能解决这些事情,但是我们也要会写(会写但是不写),不然以后得低水平工作机会都是全能的GPT啦~

熟悉SQL语言:SQL是关系型数据库管理系统(RDBMS)的标准查询语言,学习和练习SQL可以帮助您熟悉这种语言的语法和结构。掌握SQL可以使您更有效地查询、修改和管理数据库。

数据库管理技能:SQL是访问和管理关系型数据库的关键工具。通过SQL练习,您将学习如何创建和管理数据库、定义表结构、插入、更新和删除数据,以及执行高级查询和优化操作。这些技能对于数据库管理、数据分析和软件开发非常重要。

数据分析和报告:SQL是数据分析的重要工具之一。通过使用SQL查询,您可以从数据库中提取所需的数据,进行各种聚合和计算,生成有关数据的报告和可视化结果。这对于业务分析、决策支持和报告编制非常有帮助。

职业发展:SQL是广泛使用的技能,对于从事数据管理、数据分析、软件开发和相关领域的专业人士来说,具备SQL技能是非常有竞争力的优势。通过练习SQL,您可以提高自己在职场中的市场价值,并为职业发展打下坚实的基础。

效率和准确性:使用SQL查询可以更快速、更准确地访问和处理大量数据。通过练习SQL,您可以学习和应用各种查询技巧和优化策略,从而提高数据处理效率和准确性。

锻炼逻辑思维:SQL查询涉及到逻辑思维和问题解决能力。通过练习SQL,您将锻炼自己的逻辑思维能力,学习如何将问题转化为有效的SQL查询,提高自己的解决问题的能力。

掌握常用工具:SQL是许多流行数据库管理系统的标准语言,包括MySQL、Oracle、Microsoft SQL Server等。通过进行SQL练习,您将熟悉和掌握这些常用数据库管理系统的操作和工具,为实际项目开发和工作做好准备。

总的来说,SQL练习可以帮助您熟悉SQL语言、提高数据库管理和数据分析技能、促进职业发展,并锻炼逻辑思维能力。无论您是初学者还是有经验的开发人员,进行SQL练习都是非常有益