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

首頁 > 數據庫 > MySQL > 正文

MYSQL GROUP BY用法詳解

2024-07-24 13:10:58
字體:
來源:轉載
供稿:網友

背景介紹

最近在設計數據庫的時候因為開始考慮不周,所以產生了大量的重復數據。現在需要把這些重復的數據刪除掉,使用到的語句就是Group By來完成。為了進一步了解這條語句的作用,我打算先從簡單入手。

建一個測試表

 

復制代碼 代碼如下:
create table test_group(id int auto_increment primary key, name varchar(32), class varchar(32), score int);

 

查看表結構

desc test_group

mysql,groupby

插入數據

mysql,groupby

測試開始

我想知道當前每一個班級里面最高分數的同學是誰。

 

復制代碼 代碼如下:
select name, class , max(score) from test_group group by class;

 

mysql,groupby

好現在可以插入幾條重復的數據。

 

復制代碼 代碼如下:
insert into test_group(name, class, score)values('repeat','B',89);

 

mysql,groupby
現在要過濾掉重復的數據,保留最新的那條記錄。一般我們假設最新的記錄是最后插入的那條,所以它的ID應該是最大的那條。

 

復制代碼 代碼如下:
select name, class, max(id) from test_group group by name;

 

mysql,groupby

可以發現,我們關注那個項的重復性就把它放到gourp by后面。這樣我們就可以過濾掉那些與這個項重復的記錄啦。現在我們得到了我們需要的數據,我們下一步就是把那些重復的數據刪除。為了區分我們過濾出來的數據記錄與原有的記錄,我們可以給id取一個別名。

 

復制代碼 代碼如下:
select name, class, max(id) as max_id from test_group group by name;

 

mysql,groupby

下一步就是把這些關心的數據保留下來,我先把這些數據的id提取出來。因為這個是唯一確定一條記錄的。

 

復制代碼 代碼如下:
select max_id from (select name, class, max(id) as max_id from test_group group by name)b;

 

mysql,groupby

下面就是刪除操作了。思路就是刪除那些數據ID不在我們查詢結果里面的記錄。為了方便操作后對數據的對比,我先進行一次全部查詢。

 

復制代碼 代碼如下:
select * from test_group;

 

mysql,groupby

執行刪除操作。

 

復制代碼 代碼如下:
delete from test_group where id not in (select max_id from (select name, class, max(id) as max_id from test_group group by name)b);

 

最后查看結果。

mysql,groupby

總結

MySQL操作還是很靈活的,之前一直喜歡用ORM現在感覺直接使用MYSQL省去了很多事。如果你有更好更高效的方式就請你分享分享吧~~

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VeVb武林網。


注:相關教程知識閱讀請移步到MYSQL教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 曲麻莱县| 古丈县| 绥江县| 宜兴市| 丹东市| 黄冈市| 葫芦岛市| 正蓝旗| 时尚| 中山市| 嵊泗县| 江津市| 达拉特旗| 洛阳市| 奈曼旗| 都兰县| 司法| 杂多县| 砚山县| 香河县| 洪洞县| 五大连池市| 梅河口市| 廊坊市| 治县。| 中超| 苗栗市| 祥云县| 三门峡市| 永泰县| 秦皇岛市| 西和县| 拜泉县| 广东省| 日土县| 手游| 昆明市| 萨嘎县| 曲靖市| 三门峡市| 呼伦贝尔市|