mySQL之group By的簡單分析

來源:互聯網
上載者:User

標籤: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的簡單分析

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.