mysql:select max(score)不返回相关行数据

mysql:select max(score)不返回相关行数据,mysql,max,Mysql,Max,例如,如果我有一个分数表: user game score timestamp 1 50 50 date 2 60 40 date 3 70 25 date 4 80 18 date 我将收到最大分数,即20,但返回的其余列不是来自同一行。由于您没有使用GROUP子句,max函数将从整个表返回最大值。因此,如果要返回最高分数的匹配数据,则需要: SELECT * FROM table_name ORD

例如,如果我有一个分数表:

user game score timestamp 1 50 50 date 2 60 40 date 3 70 25 date 4 80 18 date
我将收到最大分数,即20,但返回的其余列不是来自同一行。

由于您没有使用GROUP子句,max函数将从整个表返回最大值。因此,如果要返回最高分数的匹配数据,则需要:

SELECT * FROM table_name ORDER BY score DESC LIMIT 1

您的查询按设计工作:它列出用户和最高总分

要获得得分最高的用户,可以使用

select user, game, score, timestamp from scores ORDER by score DESC limit 1
您使用的是MAX,它是一个聚合函数。聚合函数的作用是将表中的多行视为一个组。如果不做任何特殊操作,整个表中的所有行都将作为一个大组使用,并且当存在像MAX这样的aggregate函数时,所有这些行都将压缩为一个聚合行。对于其他聚合函数,如MIN、SUM、GROUP_CONCAT和friends,也会出现这种压缩效应。请参见:。您还可以使用GROUP BY构造应用特定分组,但如果您不这样做,则聚合函数的出现将把所有行聚集到一行中,但这种聚集是在应用WHERE条件之后发生的,因此仅聚合过滤的行

现在,由于聚合函数的这种压缩或“减少”效应,有一些方法可以从许多值中得到一个值。对于MAX,这种方法是只列出作为参数传递给MAX的表达式的所有实例的最大值。但是其他列没有这样的聚合函数。对于大多数数据库产品,在选择列表中出现未聚合列和聚合列都是错误的。但是MySQL的行为是错误的/不同的,并且只返回SELECT位中列出的每个非聚合表达式的一个可用值。哪个值取决于mysql-您不能依赖任何特定的算法


在许多情况下,人们希望对任何具有最大值的行执行某些操作,换句话说,查找具有最大值的行,但使用该行中未聚合的其他列。middaparka提供的解决方案可以做到这一点,google for MySQL group wise maximum也有其他方法可以实现这一点。有关聚合函数和相关GROUP BY子句的更多一般信息,请参阅-无耻的selfplug-我的文章:

它列出了最大分数,但我觉得其他列没有列出用户。相反,对于每一列,都会选取一些值——你不能指望它们来自同一原始行。答案太棒了!这正是我了解事物如何运作所需要的信息。谢谢我的荣幸ufk:很高兴它对你有用。
select user, game, score, timestamp from scores ORDER by score DESC limit 1