Leetcode SQL 測試題困難篇

1.部門工資前3高的員工
Employee 表包含所有員工信息,每個員工有其對應(yīng)的 Id, salary 和 department Id 挠羔。
+----+-------+--------+--------------+
| Id | Name | Salary | DepartmentId |
+----+-------+--------+--------------+
| 1 | Joe | 70000 | 1 |
| 2 | Henry | 80000 | 2 |
| 3 | Sam | 60000 | 2 |
| 4 | Max | 90000 | 1 |
| 5 | Janet | 69000 | 1 |
| 6 | Randy | 85000 | 1 |
+----+-------+--------+--------------+
Department 表包含公司所有部門的信息。
+----+----------+
| Id | Name |
+----+----------+
| 1 | IT |
| 2 | Sales |
+----+----------+
編寫一個 SQL 查詢埋嵌,找出每個部門工資前三高的員工破加。例如,根據(jù)上述給定的表格雹嗦,查詢結(jié)果應(yīng)返回:
+------------+----------+--------+
| Department | Employee | Salary |
+------------+----------+--------+
| IT | Max | 90000 |
| IT | Randy | 85000 |
| IT | Joe | 70000 |
| Sales | Henry | 80000 |
| Sales | Sam | 60000 |
+------------+----------+--------+
input:

{"headers": {"Employee": ["Id", "Name", "Salary", "DepartmentId"], "Department": ["Id", "Name"]}, "rows": {"Employee": [[1, "Joe", 70000, 1], [2, "Henry", 80000, 2], [3, "Sam", 60000, 2], [4, "Max", 90000, 1]], "Department": [[1, "IT"], [2, "Sales"]]}}
SELECT Department.Name AS Department, Employee.Name AS Employee, Salary
FROM Department INNER JOIN Employee
ON Department.Id = Employee.DepartmentId
AND Salary IN (SELECT DISTINCT TOP 3 Salary
                        FROM Employee
                        WHERE DepartmentId=Department.Id
                        ORDER BY Salary DESC
                        )
ORDER BY Department,Salary DESC

output:

{"headers":["Department","Employee","Salary"],"values":[["IT","Max",90000],["IT","Joe",70000],["Sales","Henry",80000],["Sales","Sam",60000]]}

這個題和中等難度里求部門最高工資的那個題差不多,要考慮到工資會有相同的情況,所以前三高工資注意要去重DISTINCT TOP 3;

  1. 行程和用戶
    Trips 表中存所有出租車的行程信息毛萌。每段行程有唯一鍵 Id妓布,Client_Id 和 Driver_Id 是 Users 表中 Users_Id 的外鍵棚唆。Status 是枚舉類型,枚舉成員為 (‘completed’, ‘cancelled_by_driver’, ‘cancelled_by_client’)。
    +----+-----------+-----------+---------+--------------------+----------+
    | Id | Client_Id | Driver_Id | City_Id | Status |Request_at|
    +----+-----------+-----------+---------+--------------------+----------+
    | 1 | 1 | 10 | 1 | completed |2013-10-01|
    | 2 | 2 | 11 | 1 | cancelled_by_driver|2013-10-01|
    | 3 | 3 | 12 | 6 | completed |2013-10-01|
    | 4 | 4 | 13 | 6 | cancelled_by_client|2013-10-01|
    | 5 | 1 | 10 | 1 | completed |2013-10-02|
    | 6 | 2 | 11 | 6 | completed |2013-10-02|
    | 7 | 3 | 12 | 6 | completed |2013-10-02|
    | 8 | 2 | 12 | 12 | completed |2013-10-03|
    | 9 | 3 | 10 | 12 | completed |2013-10-03|
    | 10 | 4 | 13 | 12 | cancelled_by_driver|2013-10-03|
    +----+-----------+-----------+---------+--------------------+----------+
    Users 表存所有用戶。每個用戶有唯一鍵 Users_Id难礼。Banned 表示這個用戶是否被禁止,Role 則是一個表示(‘client’, ‘driver’, ‘partner’)的枚舉類型玫锋。
    +----------+--------+--------+
    | Users_Id | Banned | Role |
    +----------+--------+--------+
    | 1 | No | client |
    | 2 | Yes | client |
    | 3 | No | client |
    | 4 | No | client |
    | 10 | No | driver |
    | 11 | No | driver |
    | 12 | No | driver |
    | 13 | No | driver |
    +----------+--------+--------+
    寫一段 SQL 語句查出 2013年10月1日 至 2013年10月3日 期間非禁止用戶的取消率蛾茉。基于上表景醇,你的 SQL 語句應(yīng)返回如下結(jié)果臀稚,取消率(Cancellation Rate)保留兩位小數(shù)。
    +------------+-------------------+
    | Day | Cancellation Rate |
    +------------+-------------------+
    | 2013-10-01 | 0.33 |
    | 2013-10-02 | 0.00 |
    | 2013-10-03 | 0.50 |
    +------------+-------------------+
    input:
{"headers": {"Trips": ["Id", "Client_Id", "Driver_Id", "City_Id", "Status", "Request_at"], "Users": ["Users_Id", "Banned", "Role"]}, "rows": {"Trips": [["1", "1", "10", "1", "completed", "2013-10-01"], ["2", "2", "11", "1", "cancelled_by_driver", "2013-10-01"], ["3", "3", "12", "6", "completed", "2013-10-01"], ["4", "4", "13", "6", "cancelled_by_client", "2013-10-01"], ["5", "1", "10", "1", "completed", "2013-10-02"], ["6", "2", "11", "6", "completed", "2013-10-02"], ["7", "3", "12", "6", "completed", "2013-10-02"], ["8", "2", "12", "12", "completed", "2013-10-03"], ["9", "3", "10", "12", "completed", "2013-10-03"], ["10", "4", "13", "12", "cancelled_by_driver", "2013-10-03"]], "Users": [["1", "No", "client"], ["2", "Yes", "client"], ["3", "No", "client"], ["4", "No", "client"], ["10", "No", "driver"], ["11", "No", "driver"], ["12", "No", "driver"], ["13", "No", "driver"]]}}
/* Write your T-SQL query statement below */
SELECT C.Day, ISNULL(ROUND(CAST(C.cancel_num AS FLOAT) / CAST(C.all_num AS FLOAT), 2),0) AS 'Cancellation Rate'
FROM 
(
SELECT A.Request_at AS Day, B.cancel_num, A.all_num
FROM
    (SELECT Request_at, COUNT(*) AS all_num
    FROM Trips, Users U1, Users U2
    WHERE (Request_at BETWEEN '2013-10-01' AND '2013-10-03')
    AND (U1.Banned = 'NO') AND (U2.Banned = 'NO')
    AND (Client_Id = U1.Users_Id) AND (Driver_Id = U2.Users_Id)
    GROUP BY Trips.Request_at) AS A
LEFT JOIN
    (SELECT Request_at, COUNT(*) AS cancel_num
    FROM Trips, Users U1,Users U2
    WHERE (Request_at BETWEEN '2013-10-01' AND '2013-10-03')
    AND (U1.Banned = 'NO') AND (U2.Banned = 'NO')
    AND (Client_Id = U1.Users_Id) AND (Driver_Id = U2.Users_Id)
    AND (Status <> 'completed')
    GROUP BY Trips.Request_at) AS B
ON A.Request_at = B.Request_at
)C
{"headers":["Day","Cancellation Rate"],"values":[["2013-10-01",0.33],["2013-10-02",0.0],["2013-10-03",0.5]]}
  1. 體育館的人流量
    X 市建了一個新的體育館三痰,每日人流量信息被記錄在這三列信息中:序號 (id)、日期 (date)窜管、 人流量 (people)散劫。
    請編寫一個查詢語句,找出高峰期時段幕帆,要求連續(xù)三天及以上获搏,并且每天人流量均不少于100。
    例如失乾,表 stadium:
    +------+------------+-----------+
    | id | date | people |
    +------+------------+-----------+
    | 1 | 2017-01-01 | 10 |
    | 2 | 2017-01-02 | 109 |
    | 3 | 2017-01-03 | 150 |
    | 4 | 2017-01-04 | 99 |
    | 5 | 2017-01-05 | 145 |
    | 6 | 2017-01-06 | 1455 |
    | 7 | 2017-01-07 | 199 |
    | 8 | 2017-01-08 | 188 |
    +------+------------+-----------+
    對于上面的示例數(shù)據(jù)常熙,輸出為:
    +------+------------+-----------+
    | id | date | people |
    +------+------------+-----------+
    | 5 | 2017-01-05 | 145 |
    | 6 | 2017-01-06 | 1455 |
    | 7 | 2017-01-07 | 199 |
    | 8 | 2017-01-08 | 188 |
    +------+------------+-----------+
    Note:
    每天只有一行記錄,日期隨著 id 的增加而增加碱茁。
    input:
{"headers": {"stadium": ["id", "date", "people"]}, "rows": {"stadium": [[1, "2017-01-01", 10], [2, "2017-01-02", 109], [3, "2017-01-03", 150], [4, "2017-01-04", 99], [5, "2017-01-05", 145], [6, "2017-01-06", 1455], [7, "2017-01-07", 199], [8, "2017-01-08", 188]]}}
SELECT DISTINCT s4.id,s4.date,s4.people 
FROM stadium s1,stadium s2,stadium s3,stadium s4 
WHERE s1.id+1=s2.id AND s2.id+1=s3.id 
AND s1.people>=100 AND s2.people>=100 AND s3.people>=100 
AND s4.id IN (s1.id,s2.id,s3.id)

output:

{"headers":["id","date","people"],"values":[[5,"2017-01-05",145],[6,"2017-01-06",1455],[7,"2017-01-07",199],[8,"2017-01-08",188]]}

END

吐槽一句 這都是什么神仙題啊,,, 還是我太弱雞了裸卫,

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市纽竣,隨后出現(xiàn)的幾起案子墓贿,更是在濱河造成了極大的恐慌,老刑警劉巖蜓氨,帶你破解...
    沈念sama閱讀 216,402評論 6 499
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件聋袋,死亡現(xiàn)場離奇詭異,居然都是意外死亡穴吹,警方通過查閱死者的電腦和手機(jī)幽勒,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,377評論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來港令,“玉大人啥容,你說我怎么就攤上這事棘钞。” “怎么了干毅?”我有些...
    開封第一講書人閱讀 162,483評論 0 353
  • 文/不壞的土叔 我叫張陵宜猜,是天一觀的道長。 經(jīng)常有香客問我硝逢,道長姨拥,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,165評論 1 292
  • 正文 為了忘掉前任渠鸽,我火速辦了婚禮叫乌,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘徽缚。我一直安慰自己憨奸,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,176評論 6 388
  • 文/花漫 我一把揭開白布凿试。 她就那樣靜靜地躺著排宰,像睡著了一般。 火紅的嫁衣襯著肌膚如雪那婉。 梳的紋絲不亂的頭發(fā)上板甘,一...
    開封第一講書人閱讀 51,146評論 1 297
  • 那天,我揣著相機(jī)與錄音详炬,去河邊找鬼盐类。 笑死,一個胖子當(dāng)著我的面吹牛呛谜,可吹牛的內(nèi)容都是我干的在跳。 我是一名探鬼主播,決...
    沈念sama閱讀 40,032評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼隐岛,長吁一口氣:“原來是場噩夢啊……” “哼猫妙!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起礼仗,我...
    開封第一講書人閱讀 38,896評論 0 274
  • 序言:老撾萬榮一對情侶失蹤吐咳,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后元践,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體韭脊,經(jīng)...
    沈念sama閱讀 45,311評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,536評論 2 332
  • 正文 我和宋清朗相戀三年单旁,在試婚紗的時候發(fā)現(xiàn)自己被綠了沪羔。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,696評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖蔫饰,靈堂內(nèi)的尸體忽然破棺而出琅豆,到底是詐尸還是另有隱情,我是刑警寧澤篓吁,帶...
    沈念sama閱讀 35,413評論 5 343
  • 正文 年R本政府宣布茫因,位于F島的核電站,受9級特大地震影響杖剪,放射性物質(zhì)發(fā)生泄漏冻押。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,008評論 3 325
  • 文/蒙蒙 一盛嘿、第九天 我趴在偏房一處隱蔽的房頂上張望洛巢。 院中可真熱鬧,春花似錦次兆、人聲如沸稿茉。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽漓库。三九已至,卻和暖如春蚤认,著一層夾襖步出監(jiān)牢的瞬間米苹,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,815評論 1 269
  • 我被黑心中介騙來泰國打工砰琢, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人良瞧。 一個月前我還...
    沈念sama閱讀 47,698評論 2 368
  • 正文 我出身青樓陪汽,卻偏偏與公主長得像,于是被迫代替她去往敵國和親褥蚯。 傳聞我的和親對象是個殘疾皇子挚冤,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,592評論 2 353

推薦閱讀更多精彩內(nèi)容

  • 183. Customers Who Never Order Problem Suppose that a web...
    olivia_ong閱讀 378評論 0 0
  • 2018-11-12 00:10:21 +0900 Notification Display is turned ...
    hjpotter1閱讀 2,696評論 1 49
  • 262.Trips and Users 難題 case when 記得加end, between如果不是數(shù)字的話記...
    吃面米糕閱讀 512評論 0 0
  • 信仰 我和你面對面坐著 你有半邊臉頰是白的 我看著黑夜在蔓延 眼睛沒有閃躲的昨天 我相信你不怕下雨 因為下雨日子才...
    月階霜滿除閱讀 185評論 6 2
  • 陸天和劉小白分手的原因至今讓劉小白反胃赞庶。 當(dāng)年训挡,陸天愛劉小白也算愛得轟轟烈烈,陸天最愛的是劉小白的“高跟鞋范兒”歧强,...
    浮生有涯閱讀 306評論 0 0