日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

小李飞刀:SQL题目第二弹!

發布時間:2024/4/17 数据库 62 豆豆
生活随笔 收集整理的這篇文章主要介紹了 小李飞刀:SQL题目第二弹! 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

寫在前面

最近都在忙著折騰Blog的事情,好幾天前就做了的題,今天重新刷一遍,有些題目又不太會做了,看來還要三刷才行。
主要刷的題目還是SQL相關的,最近感覺時間越來越緊迫了,要更加努力了呢!
后續搭建了Gitbook的話,就會單獨把每一題的題解放上去。

認真做題的分割線

第一題

595. 大的國家
難度:簡單
這里有張World表

namecontinentareapopulationgdp
AfghanistanAsia6522302550010020343000
AlbaniaEurope28748283174112960000
AlgeriaAfrica238174137100000188681000
AndorraEurope468781153712000
AngolaAfrica124670020609294100990000

如果一個國家的面積超過300萬平方公里,或者人口超過2500萬,那么這個國家就是大國家。

編寫一個SQL查詢,輸出表中所有大國家的名稱、人口和面積。

例如,根據上表,我們應該輸出:

namepopulationarea
Afghanistan25500100652230
Algeria371000002381741

我的題解:

select t.name,t.population,t.area from World t where t.area >3000000 UNION select t.name,t.population,t.area from World t where t.population >25000000

解題思路:
分別查詢面積超過300萬平方公里,和人口超過2500萬的結果,并用Union合并結果集。
執行效率:

其他
使用union的前提在于字段一致

第二題

620. 有趣的電影
難度:簡單
某城市開了一家新的電影院,吸引了很多人過來看電影。該電影院特別注意用戶體驗,專門有個 LED顯示板做電影推薦,上面公布著影評和相關電影描述。

作為該電影院的信息部主管,您需要編寫一個SQL查詢,找出所有影片描述為非boring (不無聊) 的并且id為奇數的影片,結果請按等級rating排列。
例如,下表cinema:

idmoviedescriptionrating
1Wargreat 3D8.9
2Sciencefiction8.5
3irishboring6.2
4Ice songFantacy8.6
5House cardInteresting9.1
對于上面的例子,則正確的輸出是為:
idmoviedescriptionrating
5House cardInteresting9.1
1Wargreat 3D8.9

我的題解:

SELECT a.id,a.movie,a.description,a.rating FROM cinema AS a WHERE a.id % 2 =1 AND a.description <> 'boring' ORDER BY a.rating DESC

解題思路:
分別判斷條件,id%2=1即為奇數,且不等于boring
執行效率:

其他
<>即為不等于

第三題

178. 分數排名
難度:中等
編寫一個 SQL 查詢來實現分數排名。如果兩個分數相同,則兩個分數排名(Rank)相同。請注意,平分后的下一個名次應該是下一個連續的整數值。換句話說,名次之間不應該有“間隔”。

IdScore
13.50
23.65
34.00
43.85
54.00
63.65

例如,根據上述給定的Scores表,你的查詢應該返回(按分數從高到低排列):

ScoreRank
4.001
4.001
3.852
3.653
3.653
3.504

我的題解:

select t.Score as Score,(select count(distinct score)from Scores where score >= t.Score) as Rank from Scores t order by t.Score desc

解題思路:
排名位置應該等于只有唯一數的排名情況。
比如1,2,3,則3的排名為第三位。
執行效率:

第四題

626. 換座位
難度:中等
小美是一所中學的信息科技老師,她有一張seat座位表,平時用來儲存學生名字和與他們相對應的座位 id。

其中縱列的id是連續遞增的

小美想改變相鄰倆學生的座位。

你能不能幫她寫一個SQL query來輸出小美想要的結果呢?

示例:

idstudent
1Abbot
2Doris
3Emerson
4Green
5Jeames

假如數據輸入的是上表,則輸出結果如下:

idstudent
1Doris
2Abbot
3Green
4Emerson
5Jeames

注意:
如果學生人數是奇數,則不需要改變最后一個同學的座位。
我的題解:

select * from (select id-1 as id,student from seat where id%2 = 0unionselect id+1 as id,student from seat where id%2 = 1 and (id+1) <= (select count(*) from seat)unionselect id as id,student from seat where id%2 =1 and (id+1 )>(select count(*) from seat)) as t order by id asc

解題思路:
交換位置的本質就是id互換,非末尾的奇數直接+1處理,偶數則-1處理,末尾的奇數則保持不變。
執行效率:

第五題

627. 交換工資
難度:簡單
給定一個salary表,如下所示,有m=男性 和 f=女性的值 。交換所有的f和m值(例如,將所有f值更改為m,反之亦然)。要求使用一個更新查詢,并且沒有中間臨時表。

例如:

idnamesexsalary
1Am2500
2Bf1500
3Cm5500
4Df500

運行你所編寫的查詢語句之后,將會得到以下表:

idnamesexsalary
1Af2500
2Bm1500
3Cf5500
4Dm500

我的題解:

UPDATE salary SET sex = CASEWHEN sex = 'f' THEN 'm'WHEN sex = 'm' THEN 'f' END

解題思路:
本質就是交換f和m,用case判斷值。
執行效率:

其他
修改內容update...set
判斷值case...when...then

一點點小總結

解題思路有了,很多時候因為語法不熟悉導致解題方案缺少。
另外就是執行效率較低,還需要優化SQL語句。

總結

以上是生活随笔為你收集整理的小李飞刀:SQL题目第二弹!的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。