牛客网sql练习打卡
目錄
第一題
解題:?
1.使用表的子連接
2.使用降序取第一個
第二題
解題:
?1.降序取第三個
2.limit offset
3.子查詢
2021/10/8
今天第一次開始嘗試使用牛客網練習sql,大二在讀,已經有一些sql基礎,以后想在數據分析方向發展,開始打基礎,加油!
第一題
輸入: drop table if exists ?`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`)); INSERT INTO employees VALUES(10001,'1953-09-02','Georgi','Facello','M','1986-06-26'); INSERT INTO employees VALUES(10002,'1964-06-02','Bezalel','Simmel','F','1985-11-21'); INSERT INTO employees VALUES(10003,'1959-12-03','Parto','Bamford','M','1986-08-28'); INSERT INTO employees VALUES(10004,'1954-05-01','Chirstian','Koblick','M','1986-12-01'); INSERT INTO employees VALUES(10005,'1955-01-21','Kyoichi','Maliniak','M','1989-09-12'); INSERT INTO employees VALUES(10006,'1953-04-20','Anneke','Preusig','F','1989-06-02'); INSERT INTO employees VALUES(10007,'1957-05-23','Tzvetan','Zielinski','F','1989-02-10'); INSERT INTO employees VALUES(10008,'1958-02-19','Saniya','Kalloufi','M','1994-09-15'); INSERT INTO employees VALUES(10009,'1952-04-19','Sumant','Peac','F','1985-02-18'); INSERT INTO employees VALUES(10010,'1963-06-01','Duangkaew','Piveteau','F','1989-08-24'); INSERT INTO employees VALUES(10011,'1953-11-07','Mary','Sluis','F','1990-01-22');輸出:10008|1958-02-19|Saniya|Kalloufi|M|1994-09-15
?
自己想+看大佬們的答案
解題:?
1.使用表的子連接
select * from employees where hire_date=(select max(hire_date) from employees);where語句中嵌套一個select語句 使用max函數查詢最大的hire_date 從表中找出與此最大值相等的
2.使用降序取第一個
select * from employees order by hire_date desc limit 1;這個方法有問題,如果最晚入職的不止一個人,這個就錯了
應該考慮的問題:
①最晚入職的當天未必就一個人,也許有多人,使用排序并限制得只能取得指定數量的結果
注:日期最大的就是最晚的,日期較早就是較小。
?來自 <練習SQL利器,牛客網SQL實戰題庫 - 知乎>
第二題
解題:
?1.降序取第三個
? ?
select * from employees order by hire_date desc limit 2,1;這種方法不一定可行
limit 2,1 是指:(sql里面的行號是從0開始的)從第三條記錄開始取,取一條記錄。
2.limit offset
? ?
select * from employees order by hire_date desc limit 1 offset 2;limit 1 offset 2:跳過2個從第三條記錄開始查詢1條記錄
當 limit和offset組合使用的時候,limit后面只能有一個參數,表示要取的的數量,offset表示要跳過的數量 。
3.子查詢
select * from employees where hire_date=(select distinct hire_date from employees order by hire_date desc limit 1 offset 2);泛用性更強
select * from employees
where hire_date =
(select hire_date from employees
group by hire_date
order by hire_date desc
limit 1 offset 2);
補充:
若存在多人(如3人)同時在最晚的一天入職的情形,必須要考慮去重(使用distinct或者group by)
distinct和group by的執行順序都在limit前面
來自 <查找入職員工時間排名倒數第三的員工所有信息_牛客題霸_牛客網>
select * from employees where hire_date=(select distinct hire_date from employees order by hire_date desc limit 1 offset 2);2021/10/10
停更,嗚嗚,我還是先打牢基礎再開始刷題吧。
今天開始學習《SQL基礎教程》,配合書籍和b站上的視頻一起學習!
總結
以上是生活随笔為你收集整理的牛客网sql练习打卡的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 禅道页面无法正常打开
- 下一篇: Linux原子操作与锁实现