目录
- 背景
- 步骤
- 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、多表联查
`
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 。
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 查询对分数进行排序。排名按以下规则计算:
分数应按从高到低排列。
如果两个分数相等,那么两个分数的排名应该相同。
在排名相同的分数后,排名数应该是下一个连续的整数。换句话说,排名之间不应该有空缺的数字。
select score,dense_rank() over (order by score desc) as 'rank'
from Scores
179 连续出现的数字 (模拟多张表联查)
编写一个 SQL 查询,查找所有至少连续出现三次的数字。
返回的结果表中的数据可以按 任意顺序 排列。
查询结果格式如下面的例子所示:
有点不是很明白
# 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查询来查找收入比经理高的员工。
select
e1.name as `Employee`
from
Employee e1
join Employee e2
on e1.managerId = e2.id and e1.salary >e2.salary
182 查找重复的电子邮箱(group by)
编写一个 SQL 查询来报告所有重复的电子邮件。 请注意,可以保证电子邮件字段不为 NULL。
select Email from (
select Email,count(Id)as num
from person
group by Email
)as tmp
where tmp.num >1
183 从不订购的客户(两表联查)
某网站包含两个表,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查询以查找每个部门中薪资最高的员工。
按 任意顺序 返回结果表。
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最小的唯一电子邮件。
以 任意顺序 返回结果表。 (注意: 仅需要写删除语句,将自动对剩余结果进行查询)
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 。
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 查询语句获取每位玩家 第一次登陆平台的日期。
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练习都是非常有益