2016-07-10 42 views
2

我有一個mySQL表,其中包含來自多個用戶的多個條目(由userid標識)。整行包含用戶標識,位置,種類和重量。我想要一個排行榜,其中包含最重的重量和每個用戶對某個物種的相應位置。從mySQL表創建排行榜

我想:

SELECT userid, location, f_weight_i FROM eac.catches WHERE f_weight_i = (SELECT MAX(f_weight_i) FROM eac.catches) AND species='32' GROUP BY userid ORDER BY f_weight_i 

,但沒有返回任何行。

我也試過這樣,它返回的整體最佳重量:

SELECT userid, location, f_weight_i FROM eac.catches WHERE f_weight_i = (SELECT MAX(f_weight_i) FROM eac.catches) 

我怎樣才能得到最好的權重,對各用戶每一個物種?

+0

Define'best'.. – Strawberry

+0

「best」=最大體重。 –

+0

啊,'最重'。 – Strawberry

回答

0

您可以使用內聯視圖(MySQL稱之爲派生表)來獲取給定物種的每個用戶的最大f_weight_i。

然後將返回的結果連接到表中以獲取整行。

像這樣:

SELECT c.userid 
     , c.species 
     , c.location 
     , c.f_weight_i 
    FROM eac.catches c 
    JOIN ( 
      SELECT w.userid 
       , w.species 
       , MAX(w.f_weight_i) AS max_f_weight_i 
      FROM eac.catches w 
      WHERE w.species = '32' 
      GROUP BY w.userid, w.species 
     ) m 
     ON m.max_f_weight_i = c.f_weight_id 
    AND m.userid   = c.userid 
    AND m.species  = c.species 
    ORDER BY c.f_weight_i DESC 

要獲得所有種類的結果,從線視圖查詢(派生表m)刪除WHERE子句。

+0

我覺得內在的查詢是他所需要的。 – Kinetic

+0

@KiNeTiC有時候感覺可能就是這樣 – Strawberry

+0

@KiNeTic:​​內聯視圖獲得最大的權重。但是,這並沒有得到最大權重的那一行中的「位置」列的值。如果OP不需要'位置'列,那麼內聯視圖查詢就足夠了。 – spencer7593

0

我沒有時間創建測試表,但這應該讓您關閉。

SELECT userid, location, species, f_weight_i 
FROM eac.catches INNER JOIN 
    (SELECT userid, species, MAX(f_weight_i) AS f_weight_i 
    FROM eac.catches GROUP BY userid, species) AS tmp 
ON eac.catches.userid = tmp.userid 
    AND eac.catches.species = tmp.species 
    AND eac.catches.f_weight_i = tmp.f_weight_i;