亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 數據庫 > SQL Server > 正文

針對distinct疑問引發的一系列思考

2024-08-31 01:03:31
字體:
來源:轉載
供稿:網友

有人提出了這樣一個問題,整理出來給大家也參考一下

假設有如下這樣一張表格:

針對distinct疑問引發的一系列思考

這里的數據,具有如下的特征:在一個DepartmentId中,可能會有多個Name,反之也是一樣。就是說Name和DepartmentId是多對多的關系。

現在想實現這樣一個查詢:按照DepartmentID排完序之后(第一步),再獲取Name列的不重復值(第二步),而且要保留在第一步后的相對順序。以本例而言,應該返回三個值依次是:ACB

我們首先會想到下面這樣一個寫法

select distinct name from Sample order by DepartmentId

從語義上說,這是很自然的。但是很可惜,這個語句根本無法執行,錯誤消息是:

針對distinct疑問引發的一系列思考

這個錯誤的意思是,如果使用了DISTINCT(去重復值),則出現在OrderBy后面的字段,必須也出現在SELECT后面,但如果DepartmentID如果也真的出現在SELECT后面,顯然是不會有重復值的,所以結果肯定也是不對的。

select distinct name,DepartmentId from Sample order by DepartmentId

 

針對distinct疑問引發的一系列思考

那么,既然DISINCT 與OrderBy結合起來用會有這個的一個問題,我們是否有可能變通一下,例如下面這樣:

SELECT distinct a.NameFROM (select top 100 percent name from Sample order by DepartmentId) a

想比較之前的寫法,我們用到了子查詢技術。同樣從語義上看,仍熱是很直觀明了的。我想先按照DepartmentId進行排序, 然后再去重復值。但是返回到結果是下面這樣的:

針對distinct疑問引發的一系列思考

雖然確實去除了重復值,但返回的順序卻是不對的。我們希望是先按照DepartmentId排序之后,然后去除重復值,并且保留排序后的相對順序。

為什么會出現上面這個結果呢?其實是因為DISTINCT本身是會做排序的,而且這個行為是無法更改的(下圖的執行計劃中可以看到這一點)。所以其實我們之前做的Order by在這里會失去意義?!緦嶋H上,如果觀察ADO.NET Entity Framework等ORM工具中生成的類似的一個查詢,它會自動丟棄Order by的設置】

針對distinct疑問引發的一系列思考

那么,這樣的情況下,是不是就不可能實現需求了呢?雖然說,這個需求并不多見,絕大部分時候,DISTINCT作為最后一個操作,做一次排序是合乎情理的。

我是這樣考慮到,既然DISTINCT的這個行為是內置的,那么是否可以繞過這個操作呢?最終我用的一個解決方案是:我能不能把每個Name都編上一個編號,例如有兩個A的話,第一個A我為它編號為1,第二個編號為2,以此類推。然后,查詢的時候,我先排序,然后篩選那些編號為1的Name,這樣其實也就實現了去重復值了。

針對distinct疑問引發的一系列思考

SQL Server 2005開始提供了一個ROW_NUMBER的功能,結合這個功能,我實現了下面這樣的查詢:

select a.Name from (select top 100 percentName,DepartmentId,ROW_NUMBER() over(partition by name order by departmentid) rowfrom Sample order by DepartmentId) awhere a.row=1order by a.DepartmentId

然后,我得到了下面這樣的結果,我推敲下來,這應該是符合了之前提到的這個需求的

針對distinct疑問引發的一系列思考

相比較而言,這個查詢的效率會低一些,這個是可以預見的(可以通過下圖看出一點端倪)。但如果需求是硬性的,那么犧牲一些性能也是不奇怪的。當然,我們可以再研究看看是否有更優的一些寫法。無論如何,使用內置標準的實現,通常都是相對較快的。

以上就是關于distinct疑問引發的一系列思考,希望對大家的學習有所幫助。


注:相關教程知識閱讀請移步到MSSQL教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美寡妇偷汉性猛交| 国产精品高清免费在线观看| 国产精品亚洲аv天堂网| 2021国产精品视频| 九九热这里只有在线精品视| 中文字幕一区日韩电影| 91九色国产视频| 91极品女神在线| 久久视频免费在线播放| 亚洲图片欧洲图片av| 668精品在线视频| 欧美成人黄色小视频| 欧美成人精品在线视频| 国产精品视频在线观看| www.欧美精品一二三区| 欧美精品在线观看| 久久久99免费视频| 色综合伊人色综合网站| 国产精品99久久久久久www| 97成人精品视频在线观看| 国产男人精品视频| 欧美在线观看一区二区三区| 亚洲免费电影一区| 国产精品久久久久久久久久久久久| 热久久99这里有精品| 国内精品久久久久影院优| 国产成人综合精品| 中文字幕亚洲专区| www.欧美精品一二三区| 久久精品国产电影| 欧美国产日本高清在线| 国产亚洲精品久久| 岛国av一区二区在线在线观看| 国产精品久久久久aaaa九色| 欧美国产日韩一区二区三区| 欧美日韩国产999| 国产精品扒开腿做爽爽爽视频| 亚洲男女性事视频| 欧美精品激情视频| 最新国产精品亚洲| 91久久国产精品91久久性色| 日韩精品亚洲元码| 欧美激情精品久久久久久免费印度| 2024亚洲男人天堂| 夜夜嗨av一区二区三区四区| 欧美精品性视频| 美日韩精品免费视频| 久久久亚洲欧洲日产国码aⅴ| 亚洲日本中文字幕| 国产91对白在线播放| 国产欧美久久一区二区| 久久久久久成人精品| 中文字幕亚洲一区二区三区| 国产精品久久久av久久久| 一本色道久久综合亚洲精品小说| 亚洲精品久久久一区二区三区| 欧美电影免费在线观看| 成人精品aaaa网站| 亚洲美女激情视频| 精品亚洲一区二区三区四区五区| 91国产视频在线| 久久中文字幕在线| 91在线视频导航| 91av在线播放视频| 中文字幕欧美专区| 午夜精品福利电影| 亚洲黄色片网站| 久久精品青青大伊人av| 久久精品成人欧美大片| 国产精品久久久久久久久久久久| 国产精品免费小视频| 爱福利视频一区| 亚洲国产精品电影在线观看| 国产欧美一区二区| 欧美与欧洲交xxxx免费观看| 在线成人一区二区| 国产精品视频最多的网站| 国内精品国产三级国产在线专| 欧美日本精品在线| 亚洲欧美日韩第一区| 国产精品视频一区二区高潮| 精品福利视频导航| 色先锋资源久久综合5566| 国产有码在线一区二区视频| 欧美乱人伦中文字幕在线| 国产精品久久97| 日韩成人网免费视频| 国产精品v片在线观看不卡| 亚洲国产古装精品网站| 国产精品热视频| 91经典在线视频| 国产精品白嫩初高中害羞小美女| wwwwwwww亚洲| 亚洲福利小视频| 精品激情国产视频| 日本韩国在线不卡| 欧美人与性动交| 亚洲国产日韩精品在线| 欧美成人网在线| 国产精品一区二区三区毛片淫片| 亚洲一区二区久久久久久| 欧美亚洲国产成人精品| 欧美日韩一区二区三区| 欧美诱惑福利视频| 国产精品久久中文| 成人女保姆的销魂服务| 福利一区福利二区微拍刺激| 国产精品美女999| 欧美日韩福利视频| 91久久国产综合久久91精品网站| 亚洲加勒比久久88色综合| 中文字幕av一区二区三区谷原希美| 日韩精品免费一线在线观看| 欧美亚洲另类激情另类| 精品国产网站地址| 久久影院中文字幕| 欧美极品少妇全裸体| 国产一区二区三区高清在线观看| 亚洲第一级黄色片| 亚洲片在线观看| 久久亚洲精品一区二区| 91香蕉嫩草神马影院在线观看| 欧美精品亚州精品| 成人国产精品一区二区| 欧美精品电影在线| 红桃视频成人在线观看| 久久成人精品视频| 欧美成人性生活| 伊人伊成久久人综合网小说| 成人日韩在线电影| 欧美最近摘花xxxx摘花| 国产精品精品视频一区二区三区| 亚洲成年人在线播放| 96sao精品视频在线观看| 91美女片黄在线观看游戏| 日韩美女中文字幕| 欧美日韩黄色大片| 亚洲欧美日本伦理| 亚洲美女av网站| 亚洲美女精品久久| 欧美精品激情blacked18| 国产一区二区三区欧美| 欧美老女人www| 国产精品久久久久久久app| 在线中文字幕日韩| 国产一区二区欧美日韩| 亚洲伊人久久大香线蕉av| 成人网在线观看| 精品久久香蕉国产线看观看gif| 欧美国产亚洲视频| 亚洲欧美日韩一区二区在线| 一道本无吗dⅴd在线播放一区| 亚洲精品国产拍免费91在线| 91欧美精品成人综合在线观看| 日韩免费在线视频| 91精品视频在线免费观看| 日韩不卡在线观看| 亚洲欧美制服中文字幕| 成人久久18免费网站图片| 2019国产精品自在线拍国产不卡| 深夜成人在线观看| 国内精久久久久久久久久人| 欧美中文字幕在线| 日韩中文字幕免费视频|