MYSQL GROUP BY用法詳解。本站提示廣大學習愛好者:(MYSQL GROUP BY用法詳解)文章只能為提供參考,不一定能成為您想要的結果。以下是MYSQL GROUP BY用法詳解正文
配景引見
比來在設計數據庫的時刻由於開端斟酌不周,所以發生了年夜量的反復數據。如今須要把這些反復的數據刪除失落,應用到的語句就是Group By來完成。為了進一步懂得這條語句的感化,我盤算先從簡略動手。
建一個測試表
create table test_group(id int auto_increment primary key, name varchar(32), class varchar(32), score int);
檢查表構造
desc test_group
拔出數據
測試開端
我想曉得以後每個班級外面最高分數的同窗是誰。
select name, class , max(score) from test_group group by class;
好如今可以拔出幾條反復的數據。
insert into test_group(name, class, score)values('repeat','B',89);
如今要過濾失落反復的數據,保存最新的那筆記錄。普通我們假定最新的記載是最初拔出的那條,所以它的ID應當是最年夜的那條。
select name, class, max(id) from test_group group by name;
可以發明,我們存眷誰人項的反復性就把它放到gourp by前面。如許我們便可以過濾失落那些與這個項反復的記載啦。如今我們獲得了我們須要的數據,我們下一步就是把那些反復的數據刪除。為了辨別我們過濾出來的數據記載與原本的記載,我們可以給id取一個體名。
select name, class, max(id) as max_id from test_group group by name;
下一步就是把這些關懷的數據保存上去,我先把這些數據的id
提掏出來。由於這個是獨一肯定一筆記錄的。
select max_id from (select name, class, max(id) as max_id from test_group group by name)b;
上面就是刪除操作了。思緒就是刪除那些數據ID不在我們查詢成果外面的記載。為了便利操作後對數據的比較,我先輩行一次全體查詢。
select * from test_group;
履行刪除操作。
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操作照樣很靈巧的,之前一向愛好用ORM如今感到直接應用MYSQL省去了許多事。假如你有更好更高效的方法就請你分享分享吧~~
以上就是本文的全體內容,願望對年夜家的進修有所贊助,也願望年夜家多多支撐。