SQL中的distinct關鍵詞


至少SQL Server,HQL,Oracle都有效

通常SQL中對表中數據去重,會首先想到 distinct 關鍵字,

能實現的需求

1. distinct可以對單個字段去重
select distinct name from A


2. 對多個字段去重時,此時所列的字段需要同時滿足才會起到去重效果,否則不會去重

select distinct name, id from A       --name和id同時重復才能去重,有一個不一樣都不會去重

        --上面的寫法是對name和id列都去重,而不是僅對name去重,id不去重

select distinct * from A      --*所代表的所有字段都重復時,才能去重

不能實現的需求

3. 不能實現指定字段去重,其他字段不去重的效果
select name, distinct id from A   --僅希望對id列進行去重,name列不去重,xxx這樣是不行的,無法實現 ,而且會提示錯誤,因為distinct必須放在開頭

問題:
如果想實現針對某一字段去重,其他字段是否重復不關心的效果怎么處理?
答:
可以采用row_number()的窗口函數
轉換問題,可以轉換為對重復的行取top1,這樣使用over()函數,對指定列分組,排序,然后結合row_number()給每一組的數據一列序列,再對集合取序列為1的行

結合一些用例更容易懂一些。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM