MYSQL GROUP BY用法詳解

2021-08-04 00:24:44 字數 1304 閱讀 8219

建乙個測試表

複製** **如下: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 GROUP BY用法詳解

背景介紹 最近在設計資料庫的時候因為開始考慮不周,所以產生了大量的重複資料。現在需要把這些重複的資料刪除掉,使用到的語句就是group by來完成。為了進一步了解這條語句的作用,我打算先從簡單入手。建乙個測試表 程式設計客棧 複製 如下 create table test group id int ...

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但你想要避免排序結果的消耗,你可...