MySQL中group by max如何提取最大的一條記錄

tab_game

mysql> select * from tab_game;
+----+-----------+-----------+-----------------+
| id | game_code | game_name | game_desc       |
+----+-----------+-----------+-----------------+
|  1 | 1001      | doudizhu  | doudizhuhaowan  |
|  2 | 1002      | majiang   | cuomajiangbucuo |
|  3 | 1003      | fahongbao | hongbaoxiangyao |
+----+-----------+-----------+-----------------+

tab_game_version

mysql> select * from tab_game_version;
+----+-----------+------------------+-----------+
| id | game_code | game_version_int | game_size |
+----+-----------+------------------+-----------+
|  1 | 1001      |               11 | 5MB       |
|  2 | 1001      |               12 | 6MB       |
|  3 | 1001      |               15 | 8MB       |
|  4 | 1002      |               10 | 1MB       |
|  5 | 1002      |               20 | 2MB       |
|  6 | 1003      |             1000 | 7MB       |
|  7 | 1003      |             2000 | 9MB       |
+----+-----------+------------------+-----------+

 有這樣的兩張表,要查出每個遊戲的最大的game_version_int值的記錄 

 最終想得到的結果是
game_code   game_name  game_version_int game_size
1001        鬥地主         15               8MB
1002        搓麻將         20               2MB 
1003        發送包         2000             9MB


SQL 實現
第一種方式   不通用,只在MYSQL中可以用
mysql>  select game_code,max(game_version_int),game_size
    -> select * from tab_game_version t1 order by t1.gam
nt desc) t group by game_code ;
+-----------+-----------------------+-----------+
| game_code | max(game_version_int) | game_size |
+-----------+-----------------------+-----------+
| 1001      |                    15 | 8MB       |
| 1002      |                    20 | 2MB       |
| 1003      |                  2000 | 9MB       |
+-----------+-----------------------+-----------+
第二種方式,採用字符串拼接的方式,可以解決

mysql>  select * from tab_game_version where
    -> concat(game_code,game_version_int)
    -> in (select concat(game_code,max(game_version_int)) from tab_game_version
t1 group by t1.game_code )  ;
+----+-----------+------------------+-----------+
| id | game_code | game_version_int | game_size |
+----+-----------+------------------+-----------+
|  3 | 1001      |               15 | 8MB       |
|  5 | 1002      |               20 | 2MB       |
|  7 | 1003      |             2000 | 9MB       |
+----+-----------+------------------+-----------+

第三種方式,

mysql>  select a.game_code,b.game_size,a.game_version_int,c.game_name from (sele
ct game_code,max(game_version_int) game_version_int from tab_game_version group
by game_code) a
    -> left join tab_game_version b on a.game_code = b.game_code and a.game_vers
ion_int = b.game_version_int  left join tab_game c on b.game_code = c.game_code
;
+-----------+-----------+------------------+-----------+
| game_code | game_size | game_version_int | game_name |
+-----------+-----------+------------------+-----------+
| 1001      | 8MB       |               15 | doudizhu  |
| 1002      | 2MB       |               20 | majiang   |
| 1003      | 9MB       |             2000 | fahongbao |
+-----------+-----------+------------------+-----------+


發佈了31 篇原創文章 · 獲贊 22 · 訪問量 8萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章