繁体   English   中英

如何选择列值最高的行,如果重复则返回最上面的行?

[英]How to select rows with the highest column value and in case of duplicates return the top most row?

我有一个名为player_ratings的表,该表包含两列: player_idrating 例如:

 |  player_id     |       rating       | 
 |     1          |        950         |
 |     1          |        945         |
 |     2          |        850         |
 |     2          |        850         |

我想返回玩家等级最高的玩家列表。

如果表中有重复的行,则返回最上面的行。 例如, player_id 2有两行具有相同的rating因此请返回表中的第3行。

列表中不应包含任何重复的玩家。 (请参阅预期的输出)

我尝试了以下查询,但它不会删除重复的行:

SELECT * 
FROM player_ratings 
INNER JOIN ( SELECT player_id, MAX(rating) as max_rating FROM player_ratings GROUP BY player_id) topratings 
 ON player_ratings.player_id = topratings.player_id
 AND player_ratings.rating = topratings.max_rating 
ORDER BY player_ratings.rating DESC ;

实际输出

 |  player_id     |       ranking       | 
 |     1          |         950         |
 |     2          |         850         |
 |     2          |         850         |

预期的输出

 |  player_id     |       ranking       | 
 |     1          |         950         |
 |     2          |         850         |

您可以在下面尝试-

   SELECT player_id, MAX(rating) as max_rating FROM player_ratings 
   GROUP BY player_id
   order by max_rating desc

由于只有两列,即玩家ID和排名,您可以简单地进行汇总:

select player_id, max(rating)
from player_ratings
group by player_id
order by max(rating) desc;

假设您在player_ratings具有唯一的ID,则可以执行以下操作:

select pr.*
from player_ratings pr
where pr.player_ratings_id in (select pr2.player_ratings_id
                               from player_ratings pr2
                               where pr2.player_id = pr.player_id
                               order by pr2.max_rating desc, 
                                        pr2.player_ratings_id asc
                              );

使用GROUP BYMAX()

SELECT player_id, MAX(rating) as Rating
FROM player_ratings GROUP BY player_id
ORDER BY 2 DESC

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM