Group by 是 MySQL 很常用的一個語法,用來將相同的值做合併,在合併的時候我們常常會希望控制像取最新、最舊的資料,舉個例子:一間房地產公司想取旗下業務,一年中最高業績的月份來做比較。

一般來說我們會用子查詢的方式來達到我們的需求,但我實際上在碰到相關應用的時候如果資料太多,用子查詢的方式效率實在太差,所以我要介紹的是不用子查詢的方式。

以這個例子來說我們會有兩張表,A 表存業務的資訊,B 表存每個業務每個月的業績

A 表

sn name mobile
1 趙大衛 0900-123456
2 李小明 0900-456789

B 表

sn name month performance
1 趙大衛 1 100000
2 趙大衛 2 150000
3 趙大衛 3 170000
4 趙大衛 4 120000
5 趙大衛 5 360000
6 李小明 1 180000
7 李小明 2 200000
8 李小明 3 355000
9 李小明 4 150000
10 李小明 5 90000

以這兩張表來說,整段的 SQL 語法如下

SELECT name, month, performance,

FROM

A表 as AMIN

LEFT JOIN

B表 as BMAX

ON

AMIN.name = BMAX.name AND AMIN.performance < BMAX.performance

WHERE BMAX.performance is NULL;

從語法中我們可看出是用 LEFT JOIN 的方式來達成,所以控制 ON 的條件就可以換成不同的答案,如果我們要取最差的月份,就是 AMIN.performance > BMAX.performance,效能會比用子查詢快很多喔!