小李飞刀:SQL题目第二弹!
寫在前面
最近都在忙著折騰Blog的事情,好幾天前就做了的題,今天重新刷一遍,有些題目又不太會做了,看來還要三刷才行。
主要刷的題目還是SQL相關的,最近感覺時間越來越緊迫了,要更加努力了呢!
后續搭建了Gitbook的話,就會單獨把每一題的題解放上去。
認真做題的分割線
第一題
595. 大的國家
難度:簡單
這里有張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 |
如果一個國家的面積超過300萬平方公里,或者人口超過2500萬,那么這個國家就是大國家。
編寫一個SQL查詢,輸出表中所有大國家的名稱、人口和面積。
例如,根據上表,我們應該輸出:
| 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解題思路:
分別查詢面積超過300萬平方公里,和人口超過2500萬的結果,并用Union合并結果集。
執行效率:
其他
使用union的前提在于字段一致
第二題
620. 有趣的電影
難度:簡單
某城市開了一家新的電影院,吸引了很多人過來看電影。該電影院特別注意用戶體驗,專門有個 LED顯示板做電影推薦,上面公布著影評和相關電影描述。
作為該電影院的信息部主管,您需要編寫一個SQL查詢,找出所有影片描述為非boring (不無聊) 的并且id為奇數的影片,結果請按等級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即為奇數,且不等于boring
執行效率:
其他
<>即為不等于
第三題
178. 分數排名
難度:中等
編寫一個 SQL 查詢來實現分數排名。如果兩個分數相同,則兩個分數排名(Rank)相同。請注意,平分后的下一個名次應該是下一個連續的整數值。換句話說,名次之間不應該有“間隔”。
| 1 | 3.50 |
| 2 | 3.65 |
| 3 | 4.00 |
| 4 | 3.85 |
| 5 | 4.00 |
| 6 | 3.65 |
例如,根據上述給定的Scores表,你的查詢應該返回(按分數從高到低排列):
| 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解題思路:
排名位置應該等于只有唯一數的排名情況。
比如1,2,3,則3的排名為第三位。
執行效率:
第四題
626. 換座位
難度:中等
小美是一所中學的信息科技老師,她有一張seat座位表,平時用來儲存學生名字和與他們相對應的座位 id。
其中縱列的id是連續遞增的
小美想改變相鄰倆學生的座位。
你能不能幫她寫一個SQL query來輸出小美想要的結果呢?
示例:
| 1 | Abbot |
| 2 | Doris |
| 3 | Emerson |
| 4 | Green |
| 5 | Jeames |
假如數據輸入的是上表,則輸出結果如下:
| 1 | Doris |
| 2 | Abbot |
| 3 | Green |
| 4 | Emerson |
| 5 | Jeames |
注意:
如果學生人數是奇數,則不需要改變最后一個同學的座位。
我的題解:
解題思路:
交換位置的本質就是id互換,非末尾的奇數直接+1處理,偶數則-1處理,末尾的奇數則保持不變。
執行效率:
第五題
627. 交換工資
難度:簡單
給定一個salary表,如下所示,有m=男性 和 f=女性的值 。交換所有的f和m值(例如,將所有f值更改為m,反之亦然)。要求使用一個更新查詢,并且沒有中間臨時表。
例如:
| 1 | A | m | 2500 |
| 2 | B | f | 1500 |
| 3 | C | m | 5500 |
| 4 | D | f | 500 |
運行你所編寫的查詢語句之后,將會得到以下表:
| 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解題思路:
本質就是交換f和m,用case判斷值。
執行效率:
其他
修改內容update...set
判斷值case...when...then
一點點小總結
解題思路有了,很多時候因為語法不熟悉導致解題方案缺少。
另外就是執行效率較低,還需要優化SQL語句。
總結
以上是生活随笔為你收集整理的小李飞刀:SQL题目第二弹!的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mac下用scp命令实现本地文件与服务器
- 下一篇: 网页登陆验证之图片验证码