国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > 綜合 > 正文

一道SQL的面試題之聯想

2024-07-21 02:50:16
字體:
來源:轉載
供稿:網友
一道SQL的面試題之聯想

一道SQL的面試題之聯想

本人工作在一家小型的民營企業,主要從事業務系統的日常維護,二次開發,菜鳥一枚。周五經理準備面試兩個開發人員,據簡歷,都還比較不錯,讓經理產生了想法,于是準備了一套面試題目,給我們亮了一道SQL題目,非他之手,據出此題者說,如果面試者只能寫出一種方法,基本可以pass。請讀者仔細看題:

題目:如下表,用一條select語句求出所有課程在80分(含80分)以上的學生姓名,請寫出所有可行方案。(注意:表名為sc,字段為name,kc,score)

這道題目并不陌生吧,相信大家一看就能下手,但是人往往對簡單的東西總是不屑一顧,就拿此題說吧,不難,相信做開發的都能做,百度一大把答案,你也許會說這是小兒科,這樣的面試題沒有任何意義,真的是這樣的嗎?想想我們做IT相關的工作的核心是什么?技術不行可以借助百度,谷歌,群友,論壇逐步學習并掌握,思維呢……我敢斷言,只會碼代碼的人絕不是一名優秀的程序員,常言道,規矩是死的,人是活的。人的思維是至關重要的,無論哪一行,沒有一個好思維,難成器。不要以為簡單,其實不見得比你想象的簡單,你對此題能提供幾種方案?

下面進行剖析:

1)準備數據:

 1 use test2012 2 go 3 if OBJECT_ID('sc') is not null 4   drop table sc 5 create table sc 6 ( 7 name char(10), 8  kc char(10), 9  score decimal(5,2)10  )11 12  insert into sc13 values('張三','語文',80),14       ('張三','數學',81),15       ('張三','英語',100),16       ('李四','語文',90),17       ('李四','數學',80),18       ('李四','英語',70),19       ('王五','語文',100),20       ('王五','數學',100),21       ('王五','英語',79)
View Code

校對一下:

2)本人稍微思索了一下,提供一下幾種解決方案(只針對上表及其數據):

方案一:(分組,最小值)

1 --方法一:按學生分組,求最小分數>=802 select name from sc3 group by name 4 having min(score)>=80
View Code

結果及其執行計劃:

方案二:(篩選,分組)

1 --方法二:篩選成績>=80,在進行分組2 select name from sc where score>=803 group by name4 having count(distinct kc)>=3
View Code

結果及其執行計劃:

方案三:(內連接)

1 --方法三:內連接2 select distinct a.name from sc a,sc b,sc c3 where a.name=b.name and a.name=c.name4 and a.kc<>b.kc and a.kc<>c.kc and b.kc<>c.kc5 and b.score>=80 and a.score>=80 and c.score>=80
View Code

結果及其執行計劃:

方案四:(嵌套)

1 --方法四:嵌套2 select distinct name from sc where name not in 3 (select name from sc where score<80)
View Code

結果及其執行計劃:

當然還有any,all的方案,此處略去。四種方案中,LZ認為最優方案是方案一,最為符合題意。其他方案均有特殊性,不具有普遍性。

為什么這么說?

首先針對上表及其表中僅有的數據,四種方案都能達到目的,即解決問題。如果對表中數據稍做變動,即原題不變,表格變為:

這時,方案一,方案四可行,方案二,方案三就不是可行方案了。

再次修改,原題不變,表格不變,附加條件:只能使用一次關鍵字select。

這時,方案一,二,三可行,方案四就不滿足附加條件了。

PS:此題的演變還有很多種,不滿足于會解題,會剖析問題,思維拓展,這樣才會向成功靠近。一個問題的解決方案有多種,但是最優的卻只有一種,重在思維能力,思索角度。

讀者可以看看執行計劃,分析,有什么想法呢?

3)總結:

此題雖陳舊,卻值得琢磨,考察的是一個IT的思維能力,代碼的核心在于算法。能從一個簡單的問題挖掘出不一樣的東西,這個才是IT的精髓。很遺憾,多年的老鳥居然一個也寫不出來,或許你會說這并不能代表什么?但是可以想象他的代碼質量及其性能如何?!解決問題固然是好,更體現IT精髓卻不是它而是從解決方案中找到最優方案。

一句話,會解決問題只能說明你的基礎,優化解決方案才會體現你的能力。

PS:如有不足之處,歡迎指點與切磋,您的光臨是我的榮幸,聯系方式QQ:649414754


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 开平市| 大方县| 彭泽县| 达孜县| 黎平县| 白水县| 福鼎市| 岱山县| 平利县| 资阳市| 台山市| 英吉沙县| 日照市| 沧州市| 和顺县| 井研县| 筠连县| 白水县| 天台县| 荥经县| 龙井市| 玉山县| 特克斯县| 蕲春县| 隆林| 宁国市| 赤壁市| 五大连池市| 宁陕县| 区。| 靖江市| 武义县| 商丘市| 丹阳市| 车险| 汉沽区| 桐城市| 景东| 兰西县| 宁都县| 临湘市|