目录
前言
题目1:游戏玩法分析
题目2:订单最多的客户
题目3: 大的国家
题目4:连续出现的数字
题目小结
前言
- 回顾前文精彩片段
数据库LeetCode每日练习(一)_小杰312的博客-CSDN博客sql操作LeetCode每日练习https://blog.csdn.net/weixin_53695360/article/details/123985354?spm=1001.2014.3001.5501数据库LeetCode每日练习(二)_小杰312的博客-CSDN博客数据库LeetCode每日练习(二)https://blog.csdn.net/weixin_53695360/article/details/124020795?spm=1001.2014.3001.5501
题目1:游戏玩法分析
511. 游戏玩法分析 I
- 题目要求: 获取每一个玩家的第一次登录平台的日期
- 处理思路:第一次登录平台的日期, 竟然是第一次登录平台的日期, 那也就是对应的player_id中最小的event_date 了, 所以思路出来了, 直接一个聚合查询查询min(date) 即可
- 如何想到使用聚合查询, 首先存在多个登录日期, 但是我们仅仅需要最小的哪一个, 于是想到了通过聚合查询进行压缩处理, 结合一下聚合函数使用即可,常用的聚合函数附在如下
select
player_id,
min(event_date) as 'first_login'
from
activity
group by
player_id;
题目2:订单最多的客户
586. 订单最多的客户
- 题目要求: 获取订单最多的客户
- 思考方向: 我们需要获取订单数最多的客户, 首先第一步就是计算出来订单数, 计算订单数自然需要聚合查询, count(customer_number) 或者 count(*) 来获取订单数, 然后直接按照订单数从大到小排序, 第一条就是需要的max 订单数客户 (获取最大,第几大, 第几小 一定想到 sort + limit分页)
select
customer_number
from
orders
group by customer_number
order by count(*) desc
limit 0, 1; # 获取第一条记录
题目3: 大的国家
595. 大的国家
- 题目要求: 需要我们按照如下规则筛选出来大国
- 解题思路: 特别的简单, 直接一个where 条件查询筛选大国即可实现
select
name, population, area
from
world
where
area >= 3000000 or population >= 25000000;
-- where 条件筛选大国
题目4:连续出现的数字
180. 连续出现的数字文章来源:https://www.toymoban.com/news/detail-673121.html
文章来源地址https://www.toymoban.com/news/detail-673121.html
- 题目要求:1. 连续出现 2. 出现三次
- 因为需要从同一张表中找,只有一张表, 关系是表中连续三次出现的重复num的记录, 所以其实很容易想到可以通过自联结查询. 然后查询的过程中肯定会出现重复, 因为相当于是同一张表自己跟自己连接两次. 故而需要进行一个distinct
select distinct
l1.num as 'ConsecutiveNums' -- 'consecutivenums'题目要求别名
from
logs l1 inner join logs l2 on l1.num = l2.num
inner join logs l3 on l1.num = l3.num
# 子连接关系条件满足同一个num
where
l1.id = l2.id + 1 && l2.id = l3.id + 1;
-- where条件保证连续记录
题目小结
- 查找重复出现记录数我们需要想到 聚合查询, 因为聚合查询可以做到压缩相同关键字聚合操作。
- 查找第几大或者小记录 我们需要想到可以使用 sort + limit 分页
- 多表连接操作不限表的数量, 甚至可以三表,四表同时连接,只是数量过多之后一般不建议这样书写了,需要另辟蹊径, 因为你写都写不下了
到了这里,关于数据库LeetCode每日练习(三)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!