標籤:mysql group by
1.測試資料:
create table `t_class` (`id` bigint (11),`name` varchar (150),`age` int (11),`class` int (11)); insert into `t_class` (`id`, `name`, `age`, `class`) values(‘1‘,‘tom1‘,‘22‘,‘1‘);insert into `t_class` (`id`, `name`, `age`, `class`) values(‘2‘,‘tom2‘,‘32‘,‘1‘);insert into `t_class` (`id`, `name`, `age`, `class`) values(‘4‘,‘jerry2‘,‘33‘,‘2‘);insert into `t_class` (`id`, `name`, `age`, `class`) values(‘5‘,‘hanchao‘,‘11‘,‘3‘);insert into `t_class` (`id`, `name`, `age`, `class`) values(‘6‘,‘hanchao2‘,‘30‘,‘3‘);insert into `t_class` (`id`, `name`, `age`, `class`) values(‘7‘,‘jerry3‘,‘32‘,‘2‘);insert into `t_class` (`id`, `name`, `age`, `class`) values(‘8‘,‘jerry4‘,‘23‘,‘2‘);insert into `t_class` (`id`, `name`, `age`, `class`) values(‘9‘,‘jerry1‘,‘33‘,‘2‘);
2.需求:尋找每個班年齡最大的學生的資訊。
很明顯,我們會用到group by,
eg:
SELECT id,NAME,MAX(age),class FROM t_class GROUP BY class;【錯誤的寫法!!】
但是,這是錯誤的寫法!!
當然,我們也可以這麼寫:
SELECT * FROM (SELECT * FROM t_class ORDER BY age DESC) AS bGROUP BY class;
但是,我不建議這麼寫,因為這麼寫有些不可預知的事情發生。我們先order by 再group by ,結果可能不是取的年齡最大的學生資訊,具體原因,我還在尋找中,當然你知道原因也可以告訴我,證據如下:
650) this.width=650;" src="https://s5.51cto.com/wyfs02/M02/8C/E2/wKiom1h8eISx61U2AADIvLAXf4Q632.jpg" style="float:none;" title="test1.jpg" alt="wKiom1h8eISx61U2AADIvLAXf4Q632.jpg" />
650) this.width=650;" src="https://s5.51cto.com/wyfs02/M02/8C/DE/wKioL1h8eIXjW-mUAACyDDG__qk684.jpg" style="float:none;" title="test2.jpg" alt="wKioL1h8eIXjW-mUAACyDDG__qk684.jpg" />
所以,我們可以這麼去寫:
/**方法1:**/SELECT * FROM t_class t WHERE t.age = (SELECT MAX(age) FROM t_class WHERE t.class = class) ORDER BY class;/**方法2:**/SELECT t_class.id,t_class.name,t_class.age,t_class.class FROM t_class INNER JOIN (SELECT class,MAX(age) AS maxAge FROM t_class GROUP BY class)t ON (t.class = t_class.class AND t_class.age = t.maxAge);
至於那個方法的效率高,你可以自己測試一下!
可以讀一下這篇文字,可以更好的理解group by:http://www.cnblogs.com/wiseblog/articles/4475936.html
http://blog.csdn.net/john_hongming/article/details/42742965
http://www.th7.cn/db/mysql/201502/91713.shtml
http://yueliangdao0608.blog.51cto.com/397025/81278
本文出自 “我的JAVA世界” 部落格,請務必保留此出處http://hanchaohan.blog.51cto.com/2996417/1892304
mySQL之group By的簡單分析