为什么sql MAX功能不正常?

Ian*_*inn 2 php sql max

我在某种程度上有这个查询.它返回'rating'的正确值(输出为7,最高评级),但'content'的输出来自表中的不同行.(不是最高等级的行,即7)

$bestAnswerQuery = MYSQL_QUERY("SELECT content, MAX(rating) as rating FROM answers WHERE questionID = '$questionID'");

$fetchBestAnswer = MYSQL_FETCH_ASSOC($bestAnswerQuery);

echo "$fetchBestAnswer[content] $fetchBestAnswer[rating]";
Run Code Online (Sandbox Code Playgroud)

谁能告诉我为什么?我搜索过,无法找出原因不正常的原因.

Ada*_*son 8

这不是聚合MAX在SQL中工作的方式.您的困惑来自MySQL(默认)非ANSI处理聚合.

MAX群体一样操作的聚合.在没有group by子句的情况下,整个结果集被认为是单个组.只有作为group by子句一部分的表达式才能包含在select子句中,而不必包含在聚合中.如果没有group by,则select子句中的所有列或表达式必须包含在聚合中.

但是,MySQL的默认配置通过允许您在select子句中包含非分组表达式来打破这一点,但是任何给定表达式用于获取其值的行是未定义的; 它可以是组内的任何行.

在那个冗长的答案之后,如果您想获得的是给定问题的表中的最大值rating和关联content列,您可以这样做:

select 
    rating, 
    content 

from answers 

where questionID = '$questionID' 

order by rating desc 

limit 1;
Run Code Online (Sandbox Code Playgroud)