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

歡迎訪問 生活随笔!

生活随笔

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

数据库

MySQL数据库之GROUP BY用法

發布時間:2023/12/14 数据库 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 MySQL数据库之GROUP BY用法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1.MySQL數據庫之GROUP BY的常規用法

group by的常規用法是配合聚合函數,利用分組信息進行統計,常見的是配合max等聚合函數篩選數據后分析,以及配合having進行篩選后過濾。

聚合函數max

select max(user_id),grade from user_info group by grade ;

這條sql的含義很明確,將數據按照grade字段分組,查詢每組最大的user_id以及當前組內容。注意,這里分組條件是grade,查詢的非聚合條件也是grade。這里不產生沖突。

having
select max(user_id),grade from user_info group by grade having grade>'A'

這條sql與上面例子中的基本相同,不過后面跟了having過濾條件。將grade不滿足’>A’的過濾掉了。注意,這里分組條件是grade,查詢的非聚合條件也是grade。這里不產生沖突。

2. group by的非常規用法

select max(user_id),id,grade from user_info group by grade

這條sql的結果就值得討論了,與上述例子不同的是,查詢條件多了id一列。數據按照grade分組后,grade一列是相同的,max(user_id)按照數據進行計算也是唯一的,id一列是如何取值的?看上述的數據結果,
推論:id是物理內存的第一個匹配項。
究竟是與不是需要繼續探討。

修改數據

修改id按照上述數據結果,將id=1,改為id=99,執行sql后結論:

顯然,與上述例子的結果不同。第一條數據id變成了99,查出的結果第一條數據的id從1變成了2。表明,id這個非聚合條件字段的取值與數據寫入的時間無關,因為id=1的記錄是先于id=2存在的,修改的數據不過是修改了這條數據的內容。結合mysql的數據存儲理論,由于id是主鍵,所以數據在檢索是是按照主鍵排序后進行過濾的,因此
推論:id字段的選取是按照mysql存儲的檢索數據匹配的第一條。
將id改為1后恢復了原始結果,無法推翻上述推論。
更改查詢條件

select max(user_id),user_id,id,grade from user_info group by grade

將數據user_id改為10999后,執行結果為

  • 結論
    • 當group by 與聚合函數配合使用時,功能為分組后計算
    • 當group by 與having配合使用時,功能為分組后過濾
    • 當group by 與聚合函數,同時非聚合字段同時使用時,非聚合字段的取值是第一個匹配到的字段內容,即id小的條目對應的字段內容。
    • 如需了解更多測試技術信息請關注:深圳市多測師信息技術有限公司

總結

以上是生活随笔為你收集整理的MySQL数据库之GROUP BY用法的全部內容,希望文章能夠幫你解決所遇到的問題。

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