1.說明mysql
「Group By」從字面意義上理解就是根據「By」指定的規則對數據進行分組,所謂的分組就是將一個「數據集」劃分紅若干個「小區域」,而後針對若干個「小區域」進行數據處理。(只是簡單說明這個語句的做用,不是這篇文章的重點)sql
2.使用舉例:函數
2.1表結構類型blog
mysql> desc actor; +-------------+----------------------+------+-----+-------------------+-----------------------------+ | Field | Type | Null | Key | Default | Extra | +-------------+----------------------+------+-----+-------------------+-----------------------------+ | actor_id | smallint(5) unsigned | NO | PRI | NULL | auto_increment | | first_name | varchar(45) | NO | | NULL | | | last_name | varchar(45) | NO | MUL | NULL | | | last_update | timestamp | NO | | CURRENT_TIMESTAMP | on update CURRENT_TIMESTAMP | +-------------+----------------------+------+-----+-------------------+-----------------------------+ 4 rows in set (0.00 sec)
2.2使用:排序
mysql> select first_name,last_name from actor group by first_name,last_name; +-------------+--------------+ | first_name | last_name | +-------------+--------------+ | ADAM | GRANT | | ADAM | HOPPER | | AL | GARLAND | | ALAN | DREYFUSS | | ALBERT | JOHANSSON | | ALBERT | NOLTE | | ALEC | WAYNE | | ANGELA | HUDSON | | ANGELA | WITHERSPOON | | ANGELINA | ASTAIRE | | ANNE | CRONYN | | AUDREY | BAILEY | | AUDREY | OLIVIER | | BELA | WALKEN | | BEN | HARRIS | | BEN | WILLIS | | BETTE | NICHOLSON | | BOB | FAWCETT | | BURT | DUKAKIS |
3.其餘索引
咱們知道在很早以前接觸到GROUP BY 的時候就被告知,在select指定的字段要麼就要包含在Group By語句的後面,做爲分組的依據;要麼就要被包含在聚合函數中。正如上面的使用方法那樣,那我能不能在select後面的字段顯示出來而不包括在GROUP BY 字段裏。看看下面的SQL是否會正常執行呢?rem
mysql> select first_name,last_name from actor group by actor_id;
結果可能出乎你的意料以外,來看看執行結果:文檔
mysql> select first_name,last_name from actor group by actor_id; +-------------+--------------+ | first_name | last_name | +-------------+--------------+ | PENELOPE | GUINESS | | NICK | WAHLBERG | | ED | CHASE | | JENNIFER | DAVIS | | JOHNNY | LOLLOBRIGIDA | | BETTE | NICHOLSON | | GRACE | MOSTEL | | MATTHEW | JOHANSSON | | JOE | SWANK | | CHRISTIAN | GABLE | | ZERO | CAGE | | KARL | BERRY | | UMA | WOOD | | VIVIEN | BERGEN | | CUBA | OLIVIER | | FRED | COSTNER | | HELEN | VOIGHT | | DAN | TORN | | BOB | FAWCETT | | LUCILLE | TRACY | | KIRSTEN | PALTROW | | ELVIS | MARX |
4.分析ast
這是什麼狀況?不是說若是select指定的字段要麼出如今GROUP BY裏面要麼出如今聚合函數裏面呢?我上面的SQL 沒有在GROUP BY裏面指定相應的字段也是能夠正常執行的啊!!!原來我查過MYSQL的官方文檔才知道:若是select指定的字段沒有在GROUP BY 裏面,那麼必定要保證的是他們這些字段都直接依賴與GROUP BY後面的字段。好比first_name,last_name都依賴主鍵actor_id,因此上面的結果是OK的。class
5.擴展
須要指出的在MYSQL中,當沒法使用索引的時候,GROUP BY 使用兩種策略來完成:使用臨時表或者文件排序來分組。(其餘。。。。。。。。)