寫在前面
SQL每日一題是用牛客網的sqlite庫的題目進行深度講解(感覺進度慢的小夥伴可以自行前往刷題),這個系列要開啓日更計劃,每日一題,一起進步學習。
題目描述
查找最晚入職員工的所有信息,爲了減輕入門難度,目前所有的數據裏員工入職的日期都不是同一天
這個題目所用到的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:降序排列取top1
思路2:子查詢限定max
思路1有侷限性,但這道題用思路1也可以通過,下面詳細說說
答案:
select * from employees
order by hire_date desc limit 1
上面的代碼思路是用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
但實際案例中確實會存在同一天的情況,那又應該如何做呢?
如上圖所示是我隨便插入的3條數據,可以看到emp_no爲10008和10009的hire_date相同且最晚。
select * from employees
where hire_date = (select MAX(hire_date) from employees)
如上代碼,這裏用到了子查詢,思路是:
1、先取hire_date最大的hire_date
2、where子句限定,等於剛取出來的最大的hire_date
最後取出的結果如圖:
猜你喜歡:
數據分析應關注AARRR模型的哪些指標
@ 作者:可樂
@ 公衆號/知乎專欄/頭條/簡書:可樂的數據分析之路
@加個人微信:data_cola,備註:進羣,拉你入 可樂的數據分析羣 和各行各業的小夥伴交流探討數據分析相關內容
微信公衆號
個人微信號