程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> MYSQL GROUP BY用法詳解

MYSQL GROUP BY用法詳解

編輯:MySQL綜合教程

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省去了許多事。假如你有更好更高效的方法就請你分享分享吧~~

以上就是本文的全體內容,願望對年夜家的進修有所贊助,也願望年夜家多多支撐。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved