2016-07-10 38 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;