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,效能會比用子查詢快很多喔!
發佈留言