小李飞刀:SQL题目第二弹!
寫(xiě)在前面
最近都在忙著折騰Blog的事情,好幾天前就做了的題,今天重新刷一遍,有些題目又不太會(huì)做了,看來(lái)還要三刷才行。
主要刷的題目還是SQL相關(guān)的,最近感覺(jué)時(shí)間越來(lái)越緊迫了,要更加努力了呢!
后續(xù)搭建了Gitbook的話,就會(huì)單獨(dú)把每一題的題解放上去。
認(rèn)真做題的分割線
第一題
595. 大的國(guó)家
難度:簡(jiǎn)單
這里有張World表
| Afghanistan | Asia | 652230 | 25500100 | 20343000 |
| Albania | Europe | 28748 | 2831741 | 12960000 |
| Algeria | Africa | 2381741 | 37100000 | 188681000 |
| Andorra | Europe | 468 | 78115 | 3712000 |
| Angola | Africa | 1246700 | 20609294 | 100990000 |
如果一個(gè)國(guó)家的面積超過(guò)300萬(wàn)平方公里,或者人口超過(guò)2500萬(wàn),那么這個(gè)國(guó)家就是大國(guó)家。
編寫(xiě)一個(gè)SQL查詢,輸出表中所有大國(guó)家的名稱、人口和面積。
例如,根據(jù)上表,我們應(yīng)該輸出:
| Afghanistan | 25500100 | 652230 |
| Algeria | 37100000 | 2381741 |
我的題解:
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解題思路:
分別查詢面積超過(guò)300萬(wàn)平方公里,和人口超過(guò)2500萬(wàn)的結(jié)果,并用Union合并結(jié)果集。
執(zhí)行效率:
其他
使用union的前提在于字段一致
第二題
620. 有趣的電影
難度:簡(jiǎn)單
某城市開(kāi)了一家新的電影院,吸引了很多人過(guò)來(lái)看電影。該電影院特別注意用戶體驗(yàn),專門有個(gè) LED顯示板做電影推薦,上面公布著影評(píng)和相關(guān)電影描述。
作為該電影院的信息部主管,您需要編寫(xiě)一個(gè)SQL查詢,找出所有影片描述為非boring (不無(wú)聊) 的并且id為奇數(shù)的影片,結(jié)果請(qǐng)按等級(jí)rating排列。
例如,下表cinema:
| 1 | War | great 3D | 8.9 |
| 2 | Science | fiction | 8.5 |
| 3 | irish | boring | 6.2 |
| 4 | Ice song | Fantacy | 8.6 |
| 5 | House card | Interesting | 9.1 |
| id | movie | description | rating |
| 5 | House card | Interesting | 9.1 |
| 1 | War | great 3D | 8.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即為奇數(shù),且不等于boring
執(zhí)行效率:
其他
<>即為不等于
第三題
178. 分?jǐn)?shù)排名
難度:中等
編寫(xiě)一個(gè) SQL 查詢來(lái)實(shí)現(xiàn)分?jǐn)?shù)排名。如果兩個(gè)分?jǐn)?shù)相同,則兩個(gè)分?jǐn)?shù)排名(Rank)相同。請(qǐng)注意,平分后的下一個(gè)名次應(yīng)該是下一個(gè)連續(xù)的整數(shù)值。換句話說(shuō),名次之間不應(yīng)該有“間隔”。
| 1 | 3.50 |
| 2 | 3.65 |
| 3 | 4.00 |
| 4 | 3.85 |
| 5 | 4.00 |
| 6 | 3.65 |
例如,根據(jù)上述給定的Scores表,你的查詢應(yīng)該返回(按分?jǐn)?shù)從高到低排列):
| 4.00 | 1 |
| 4.00 | 1 |
| 3.85 | 2 |
| 3.65 | 3 |
| 3.65 | 3 |
| 3.50 | 4 |
我的題解:
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解題思路:
排名位置應(yīng)該等于只有唯一數(shù)的排名情況。
比如1,2,3,則3的排名為第三位。
執(zhí)行效率:
第四題
626. 換座位
難度:中等
小美是一所中學(xué)的信息科技老師,她有一張seat座位表,平時(shí)用來(lái)儲(chǔ)存學(xué)生名字和與他們相對(duì)應(yīng)的座位 id。
其中縱列的id是連續(xù)遞增的
小美想改變相鄰倆學(xué)生的座位。
你能不能幫她寫(xiě)一個(gè)SQL query來(lái)輸出小美想要的結(jié)果呢?
示例:
| 1 | Abbot |
| 2 | Doris |
| 3 | Emerson |
| 4 | Green |
| 5 | Jeames |
假如數(shù)據(jù)輸入的是上表,則輸出結(jié)果如下:
| 1 | Doris |
| 2 | Abbot |
| 3 | Green |
| 4 | Emerson |
| 5 | Jeames |
注意:
如果學(xué)生人數(shù)是奇數(shù),則不需要改變最后一個(gè)同學(xué)的座位。
我的題解:
解題思路:
交換位置的本質(zhì)就是id互換,非末尾的奇數(shù)直接+1處理,偶數(shù)則-1處理,末尾的奇數(shù)則保持不變。
執(zhí)行效率:
第五題
627. 交換工資
難度:簡(jiǎn)單
給定一個(gè)salary表,如下所示,有m=男性 和 f=女性的值 。交換所有的f和m值(例如,將所有f值更改為m,反之亦然)。要求使用一個(gè)更新查詢,并且沒(méi)有中間臨時(shí)表。
例如:
| 1 | A | m | 2500 |
| 2 | B | f | 1500 |
| 3 | C | m | 5500 |
| 4 | D | f | 500 |
運(yùn)行你所編寫(xiě)的查詢語(yǔ)句之后,將會(huì)得到以下表:
| 1 | A | f | 2500 |
| 2 | B | m | 1500 |
| 3 | C | f | 5500 |
| 4 | D | m | 500 |
我的題解:
UPDATE salary SET sex = CASEWHEN sex = 'f' THEN 'm'WHEN sex = 'm' THEN 'f' END解題思路:
本質(zhì)就是交換f和m,用case判斷值。
執(zhí)行效率:
其他
修改內(nèi)容update...set
判斷值case...when...then
一點(diǎn)點(diǎn)小總結(jié)
解題思路有了,很多時(shí)候因?yàn)檎Z(yǔ)法不熟悉導(dǎo)致解題方案缺少。
另外就是執(zhí)行效率較低,還需要優(yōu)化SQL語(yǔ)句。
總結(jié)
以上是生活随笔為你收集整理的小李飞刀:SQL题目第二弹!的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: mac下用scp命令实现本地文件与服务器
- 下一篇: ELK 经典用法—企业自定义日志收集切割