2012-11-20 67 views
0

標題可能有點令人困惑,但我想沒有簡單的方法可以說出來。這是問題:根據原始表格行輸入從加入的MySQL列中獲取MAX值

我有兩個表。一個列出足球比賽,其中約3000個,每個都有獨立的ID。第二張桌子在一張桌子裏放置賠率,在每一行中都有一個ID,以及三個欄目主頁,抽獎和離開賠率。

當我想爲特定匹配(ID添加到WHERE子句中)提取最大首頁賠率時,沒有任何問題。大約30行被檢查並返回最大值。

當我想檢查每個單獨比賽的所有最大值時出現問題,因爲所有首頁賠率都在同一列中。所以,對於所有匹配,整個列的最大值將被返回,而不是與匹配相關的最大值。

固定裝置表包含有關比賽的信息。這很簡單,3列,再加上三個應該從另一個表中提取的最高值:

匹配ID,事件名稱,開始日期,TopHomeOdds,TopDrawOdds,TopAwayOdds。

odds表對於相同的匹配具有多行。

match ID, event name, bookmaker, homeOdds, drawOdds, awayOdds 

123456 TeamA-TeamB Bookmaker1 1.60 3.00 4.05 

123456 TeamA-TeamB Bookmaker2 1.55 3.05 4.00 

123456 TeamA-TeamB Bookmaker3 1.65 2.95 4.10 

我要提取的最大值(在上述例子中這將是1.65,3.05,4.10),所以我可以插入這些值到所述第一表中。插入不是問題,獲取最大值是。我想應該使用一些聰明的JOIN查詢,這就是你們中的一個人進來的地方......先謝謝了。

這是不準確的所有homeOdds,drawOdds和

awayOdds, so the output is something like: 

123456 match1 startdate 29.00 4.00 13.50 

234567 match2 startdate 29.00 4.00 13.50 

345678 match3 startdate 29.00 4.00 13.50 

,因爲最大價值還沒有被涉及到比賽本身所​​有的結果都相同,則返回最大值的代碼,但一般的最大值整列的數據被返回。

SELECT fixtures.matchid AS eventid, fixtures.matchdate AS eventstartdate, 
    fixtures.eventname AS eventname, MAX(odds.homeOdds) AS TopHomeOdds, 
    MAX(odds.drawOdds) AS TopDrawOdds, MAX(odds.awayOdds) AS TopAwayOdds 
    FROM 
    fixtures 
    INNER JOIN odds ON odds.matchid=fixtures.matchid 

最後一部分,一般的INNER JOIN,就是問題所在。我希望它對於匹配ID是有選擇性的,我希望它只能返回具有與第一個表中的匹配相關的行ID的列的最大值。

+0

丹,檢查這裏的一些很好的答案:http://stackoverflow.com/questions755918。特別是來自bobince的答案。 – Perception

+0

謝謝,看來GROUP BY是答案。 –

回答

0

花了我更少的時間來找到解決方案,而不是發佈問題。

如果GROUP BY eventid被添加到查詢中,它就像一個魅力。

SELECT fixtures.matchid AS eventid, fixtures.matchdate AS eventstartdate, 
    fixtures.eventname AS eventname, MAX(odds.homeOdds) AS TopHomeOdds, 
    MAX(odds.drawOdds) AS TopDrawOdds, MAX(odds.awayOdds) AS TopAwayOdds 
    FROM 
    fixtures 
    INNER JOIN odds ON odds.matchid=fixtures.matchid 
    GROUP BY eventid