日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

sql distinct多个字段_数据分析|记一“道”难忘的SQL面试题...

發布時間:2023/12/19 数据库 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 sql distinct多个字段_数据分析|记一“道”难忘的SQL面试题... 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

最近被一個簡單的SQL問題吊打,強顏歡笑

好了正文開始

一問:SQL中的 group by 和 distinct 了解嗎,簡單介紹一下?

了解了解,“Group By”從字面意義上理解就是根據“By”指定的規則對數據進行分組,所謂的分組就是將一個“數據集”劃分成若干個“小區域”,然后針對若干個“小區域”進行數據處理。

distinct是一個關鍵字,常用于select之后,用于取出去重之后的值。

追問:可以可以,那你能描述一下它倆之間的關系嗎?

(之前一直沒注意過group by和distinct之間還有關系...)

其實仔細想想,group by是分組合并,既然分組就會“減少”一部分數據;distinct主要是去重操作,同樣也會減少一部分數據,既然都會減少一部分數據,這是不是就是他們的共通之處??

所以,group by 和 distinct 都可以用于去重。那有什么區別呢?

簡單創建一個測試表object,有兩個字段編號no和名字name,添加一些數據,如圖1所示,要求去重輸出,輸出結果為【1001 狗哥】和【1002 小盒】。

圖1

分別測試如下SQL語句:

SELECT DISTINCT name FROM object ----------------------------------- SELECT DISTINCT name, no FROM object

可以發現,當單獨對name字段去重后,輸出如下圖圖2所示:

圖2

確實達到了對name字段去重的效果,可是要是使用 "SELECT DISTINCT name,no"語句,會發現輸出結果如圖3所示

圖3

仔細對比圖一發現,只有兩個字段完全一樣的數據【1001 狗哥】被去掉,其他只有一個字段重復的數據并沒有變化。其實這就反映了一個事實:distinct主要是針對全部字段去重,即去掉完全一樣的數據。

要想每個字段只保留同一個值,即針對單字段去重,也就是題目中所要求的輸出【1001 狗哥】和【1002 小盒】,可以采用group by聚合去重,代碼如下:

SELECT no, name FROM object GROUP BY name

輸出結果如圖4所示,達到最初目的:

圖4

總結

distinct和group by都可以用來去重,不同之處是distinct針對全部字段去重,而group by可以針對全部字段中的單一字段去重。

此外,兩者執行方式不同,distinct主要是對數據兩兩進行比較,需要遍歷整個表。group by分組類似先建立索引再查索引,當數據量較大時,group by速度要優于distinct。

所以在實際應用中,經常會采用group by去重,比如計算獨立訪客數UV,獨立IP數和用戶留存率時,都需要對用戶id等信息去重,采用group by可以大幅縮短時間。

總結

以上是生活随笔為你收集整理的sql distinct多个字段_数据分析|记一“道”难忘的SQL面试题...的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。