背景介紹
最近在設計資料庫的時候因為開始考慮不周,所以產生了大量的重複資料。現在需要把這些重複的資料刪除掉,使用到的語句就是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後面。這樣我們就可以過濾掉那些與這個項重複的記錄啦。現在我們得到了我們需要的資料,我們下一步就是把那mcqslnxpi些重複的資料刪除。為了區分我們過濾出來的資料記錄與原有的記錄,我們可以給id取乙個別名。
複製** **如下:
select name, class, maxwww.cppcns.com(mcqslnxpiid) 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省去了很多事。如果你有更好更高效的方式就請你分享分享吧~~
本文標題: mysql group by用法詳解
本文位址:
MYSQL GROUP BY用法詳解
建乙個測試表 複製 如下 create table test group id int auto increment primary key,name varchar 32 class varchar 32 score int 檢視表結構 desc test group 插入資料 測試開始 我想知道...
nginx limit req zone用法詳解
nginx可以使用ngx http limit req module模組的limit req zone指令進行限流訪問,防止使用者惡意攻擊刷爆伺服器。ngx http limit req module模組是nginx預設安裝的,所以直接配置即可。首先,在nginx.conf檔案中的http模組下配置...
Mysql group by語句的優化
預設情況下,mysql排序所有group by col1,col2,查詢的方法如同在查詢中指定order by col1,col2,如果顯式包括乙個包含相同的列的order by子句,mysql可以毫不減速地對它進行優化,儘管仍然進行排序。如果查詢包括group by但你想要避免排序結果的消耗,你可...