![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
sql(力扣练习)
某不愿意透露姓名的程序员
这个作者很懒,什么都没留下…
展开
-
601. 体育馆的人流量
601. 体育馆的人流量 这题的思路参考评论区,很精奇的思想,主要分为三种情况考虑进来,以a的id最小、b的id最小、c的id最小这三种进行检索查询,其中由于这三种情况的组合可能出现重复,所以需要distinct去重,主题采用笛卡尔积的形式进行关联。 题解: SELECT distinct a.* FROM Stadium a,Stadium b,Stadium c WHERE a.people >= 100 and b.people >= 100 and c.people >=原创 2021-05-27 10:38:12 · 89 阅读 · 0 评论 -
596. 超过5名学生的课
超过5名学生的课 思路:注意HAVING关键字,HAVING 配合 GROUP BY 使用,对分组后的数据进行限制,可以使用聚合函数。 SELECT class FROM courses GROUP BY class HAVING COUNT(DISTINCT student ) >= 5原创 2021-04-06 15:45:19 · 83 阅读 · 0 评论 -
595. 大的国家
大的国家 代码实现1: SELECT World.name,World.population,World.area FROM World WHERE World.area > '3000000' OR World.population > '25000000' 代码实现2: SELECT name,population,area FROM World WHERE area > '3000000' UNION SELECT name,population,area FROM W.原创 2021-04-06 15:32:58 · 61 阅读 · 0 评论 -
262. 行程和用户
行程和用户 思路:本题主要是需要注意几个函数的运用,1、ROUND()是四舍五入的函数,前面的参数是具体的数值,后面的是保存位数。2、SUM()是求和的函数,本题运用IF()进行判断。首先需要根据时间进行分组,然后需要注意条件以时间为期限,为了得到一张整体有所关联的表,需要根据对应的关联条件进行连接,采用内连接的形式得到一张总表。查询中根据相关函数进行查询得到。 具体代码: SELECT t. Request_at AS `Day`, ROUND( SUM( .原创 2021-04-06 14:57:54 · 73 阅读 · 0 评论 -
197. 上升的温度
上升的温度 思路:对于此题需要用到MYSQL中DATEDIFF()的函数,此函数可以计算出两个日期间的天数。 题解: SELECT w1.id FROM Weather w1 LEFT JOIN Weather w2 ON DATEDIFF(w1.recordDate,w2.recordDate) = 1 WHERE w1.temperature > w2.temperature ...原创 2021-04-06 13:57:56 · 43 阅读 · 0 评论 -
196. 删除重复的电子邮箱
删除重复的电子邮箱 思路:需要根据查询区分删除比较大的重复邮箱的id。第一种可以采用内连接的形式来作比较。后来突发奇想的觉得可以使用关联查询的形式。 实现一:内连接 DELETE p1 FROM Person p1,Person p2 WHERE p1.Email = p2.Email AND p1.Id > p2.Id 实现二:关联查询 代码实现: DELETE p1 FROM Person p1 LEFT JOIN Person p2 ON p1.Email = p2.Email W.原创 2021-03-31 12:26:23 · 228 阅读 · 0 评论 -
187. 重复的DNA序列
重复的DNA序列 Sql中突然出现了一题Java,应该很鬼畜吧,就给他做了。开始做本题目的时候没什么思路,后来看评论区才了解,感谢评论区的大佬,发此篇博客只是记录学习成果。 思路:由于Set中不存放重复的元素,所以可以使用Set。通过判断HashSet的存在元素来进行区分。本题的题意是解决任意长度相同的问题,本题中以定长10来解决。具体题目如下。 测试代码如下: package com.leecode.Study; import java.util.ArrayList; import jav.原创 2021-03-31 09:24:30 · 79 阅读 · 0 评论 -
185. 部门工资前三高的所有员工
部门工资前三高的所有员工 思路:审题,注意不是按照部门进行区分而是求得排名前三的工资情况 SELECT d.Name AS Department,e1.Name AS Employee,e1.Salary AS Salary FROM Employee e1 JOIN Department d ON e1.DepartmentId = d.Id WHERE 3 > ( SELECT COUNT(DISTINCT e2.Salary ) FROM Employee e2 WHERE .原创 2021-03-30 17:14:01 · 56 阅读 · 0 评论 -
184. 部门工资最高的员工
部门工资最高的员工 思路使用JOIN 将两表数据关联,再根据条件查询得到按部门分类,且工资最高的部门。 Select d.Name Department ,e.Name Employee ,e.Salary Salary FROM Employee e JOIN Department d ON e.DepartmentId = d.Id WHERE (e.Salary,d.Id) IN( SELECT Max(Salary),a.DepartmentId FROM Employee a G.原创 2021-03-30 17:11:26 · 56 阅读 · 0 评论 -
183. 从不订购的客户
从不订购的客户 思路:得了解NOT IN这题就好做了 SELECT `NAME` AS Customers FROM Customers WHERE Id NOT IN( SELECT CustomerId FROM Orders )原创 2021-03-30 14:38:02 · 47 阅读 · 0 评论 -
182. 查找重复的电子邮箱
查找重复的电子邮箱 思路:我首先想到的是采用自连接的形式,通过查找邮箱相同,需要注意额外的需要排除相同id出现的情况。第二种采用Group By的形式。相比较内连接的形式耗时更少 方法一:内连接的形式 SELECT DISTINCT p1.Email FROM Person p1, Person p2 WHERE p1.Email = p2.Email AND p1.Id != p2.Id 方法二:GROUP BY SELECT Email FROM (SELECT Email,count(.原创 2021-03-30 14:02:20 · 277 阅读 · 0 评论 -
181. 超过经理收入的员工
超过经理收入的员工 思路:起初想法比较复杂,想着需要取出员工中经理的ManageId去查询,后来发现复杂化了,直接可以通过获取两次信息进行比对得到。 (1)实现1 此处a表示的是员工、b表示的是经理 代码实现: SELECT a.name AS Employee FROM Employee a,Employee b WHERE a.ManagerId = b.Id AND a.Salary > b.Salary (2)实现2 使用JOIN SELECT a.name AS Employ.原创 2021-03-30 13:39:12 · 43 阅读 · 0 评论 -
180. 连续出现的数字
连续出现的数字 思路:主要是对连续数字的统计,首先要得到连续的num出现三次且值相等,注意是连续,然后查询的结果需要去重(连续出现说明id也是连续的) 实现代码: SELECT DISTINCT L1.num AS ConsecutiveNums FROM `Logs` l1,`Logs` l2,`Logs` l3 WHERE l1.Id = L2.Id - 1 AND l2.Id = l3.Id -1 AND l1.num = l2.num AND l2.num = l3.num ...原创 2021-03-30 11:05:45 · 55 阅读 · 0 评论 -
178. 分数排名
分数排名 思路:此题需要按照两步进行,首先查询出降序得到的分数,其次应该根据统计得到大于或者等于当前数的总数 1、先通过查询得到降序排列的分数 select Score from Scores order by Score desc 2、再通过计算排名 X:为当前传入的分数 select count(distinct b.Score) from Scores b where b.Score >= X 实现代码: select a.Score,(select count(distinct .原创 2021-03-29 17:27:00 · 54 阅读 · 0 评论 -
177. 第N高的薪水
第N高的薪水 通过mysql中的函数的形式运行,指定第几高的形式进行查询 需要注意的几个点: 1、薪水一样的问题需要避免,可以使用group by来避免重复 2、需要定义从第几个开始,因为这边采用先排序后分页,所以如果为第n大的值,需要定义Set n := n-1 ...原创 2021-03-29 17:02:12 · 46 阅读 · 0 评论 -
176. 第二高的薪水
第二高的薪水 思路:注意查询结果没有则为null 第一次尝试: 考虑欠缺,重复的情况未考虑,排序默认应该是升序的,而且需要额外考虑一种情况,如果表中只有一个数据将被判定错误,所以可以使用嵌套查询的形式。 成功界面: select(select distinct Salary from Employee e order by Salary desc limit 1,1) AS SecondHighestSalary ...原创 2021-03-29 16:42:46 · 67 阅读 · 1 评论 -
175. 组合两个表-力扣练习
组合两个表 思路:本文中提出无论如何都需要满足以下字段,所以采用关联查询的形式包含该字段,只不过结果为null 代码如下: select p.FirstName,p.LastName,a.City,a.State from Person p left join Address a on p.PersonId = a.PersonId; ...原创 2021-03-29 16:18:45 · 47 阅读 · 0 评论