這是SQL每日一題的第二篇文章
題目描述
查找入職員工時間排名倒數第三的員工所有信息,爲了減輕入門難度,目前所有的數據裏員工入職的日期都不是同一天
所用到的表還是之前的employees表
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:limit限定
思路2:子查詢
答案
# 思路1
select * from employees
order by hire_date desc limit 2,1
1、先order by降序排列
2、再limit限定,昨天說的limit m,n用到了,limit m,n表示從第m+1條數據開始,取n條數據,那麼limit2,1就表示從第3條數據開始,取1條數據,這樣就取了倒數第3條數據了。
用子查詢的思路和上一題是一樣的,也是假如hire_date有重複怎麼辦?如上圖所示,如果用思路1取到的是第3條數據,也就是hire_date = 1995-05-23這一條,但實際上它排名倒數第二,所以要用子查詢去重。
# 思路2
select * from employees where hire_date =
(select distinct hire_date from employees
order by hire_date desc limit 2,1)
1、先對hire_date去重,然後order by降序limit限定取出真正的倒數第3條數據的hire_date
2、再子查詢where子句限定,讓hire_date 等於剛取出的倒數第三
猜你喜歡:
數據分析應關注AARRR模型的哪些指標
@ 作者:可樂
@ 公衆號/知乎專欄/頭條/簡書:可樂的數據分析之路
@加個人微信:data_cola,備註:進羣,拉你入 可樂的數據分析羣 和各行各業的小夥伴交流探討數據分析相關內容
微信公衆號
個人微信號