sql 取重复key中的第一条_SQL每日一题

写在前面

SQL每日一题是用牛客网的sqlite库的题目进行深度讲解(感觉进度慢的小伙伴可以自行前往刷题),这个系列要开启日更计划,每日一题,一起进步学习。

23aedf24ce9df50dffbb3920d8346772.png

题目描述

查找最晚入职员工的所有信息,为了减轻入门难度,目前所有的数据里员工入职的日期都不是同一天

这个题目所用到的employees表的实例如下:

96a9c5204b474a05e59881a68091f9b2.png
CREATE TABLE `employees` (
`emp_no` int(11) NOT NULL,  -- '员工编号'
`birth_date` date NOT NULL,
`first_name` varchar(14) NOT NULL,
`last_name` varchar(16) NOT NULL,
`gender` char(1) NOT NULL,
`hire_date` date NOT NULL,
PRIMARY KEY (`emp_no`));

思路

思路1:降序排列取top1
思路2:子查询限定max

思路1有局限性,但这道题用思路1也可以通过,下面详细说说

答案:

# 思路1select * 

上面的代码思路是用limit限定对hire_date降序排列后取第一行,假如没有重复的hire_date的话,那么取出来的就是最晚入职的员工信息,当然这样写也能通过调试,因为这道题里明确说明了“员工入职日期都不是同一天”。

limit n 表示从第1条开始(第一条数据所在的行为0),取n条数据limit m,n 表示从m+1条开始(行m),取n条数据,如limit 1,1 表示从第2条数据开始,取1条,搭配order by使用效果更佳。所以在本题里,除了limit 1这种写法外,还可以写成limit 0,1

但实际案例中确实会存在同一天的情况,那又应该如何做呢?

3d8e1ee5b4ddef82ef8e2781877fb7af.png
如上图所示是我随便插入的3条数据,可以看到emp_no为10008和10009的hire_date相同且最晚。
# 思路2select * 

如上代码,这里用到了子查询,思路是:
1、先用max函数取出最大的hire_date
2、再用where子句限定,hire_date等于刚取出来的最大的hire_date
最后取出的结果如图:

f40f5abe5e38a0afe176de27d7ba95d6.png
每日一题,进步学习!

相关内容:

学习SQL:MySQL必知必会

对比Excel学习SQL(6):表连接

对比Excel学习SQL(5):分组和子查询

对比Excel学习SQL(4):计算字段

写给小白的SQL学习文章

猜你喜欢:

如何处理偏态数据?

数据分析应关注AARRR模型的哪些指标

泰坦尼克号数据分析

深入浅出数据分析

数据分析都有哪些岗位?

Python实现LRFM模型分析客户价值

为什么要学统计学:赤裸裸的统计学

@ 作者:可乐
@ 公众号/知乎专栏/头条/简书:可乐的数据分析之路
@加个人微信:data_cola,备注:进群,拉你入 可乐的数据分析群 和各行各业的小伙伴交流探讨数据分析相关内容

f46eca968e2d0aceb84b1978d2892d2a.png
微信公众号
9f18e987115788673439299e644eec9b.png
个人微信号
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值