SQL每日一題

寫在前面

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模型的哪些指標

泰坦尼克號數據分析

深入淺出數據分析

《吊打分析師》實戰—我要租個好房

爲什麼要學統計學:赤裸裸的統計學

成爲數據分析師的第三年,我寫了10W字

@ 作者:可樂
@ 公衆號/知乎專欄/頭條/簡書:可樂的數據分析之路
@加個人微信:data_cola,備註:進羣,拉你入 可樂的數據分析羣 和各行各業的小夥伴交流探討數據分析相關內容

微信公衆號

微信公衆號

個人微信號

個人微信號

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章