mysql-如果两个或多个成员选择了同一个团队,则返回猜测最接近分数的成员

mysql-如果两个或多个成员选择了同一个团队,则返回猜测最接近分数的成员,mysql,sql,Mysql,Sql,考虑下表,其中记录了他们认为将赢得体育比赛的成员的选择/挑选 此外,为了简单起见,每个选择都是正确的。 我需要找到一种方法来检索猜测/选择正确结果的人的成员。然而: 如果两个或两个以上的成员选择了同一个团队,则返回猜测最接近分数的成员 如果两个或两个以上的成员选择了同一个得分相同的团队,则返回两个成员 我已经成功地编写了下面的代码,但是它不会返回正确的结果,如果需要返回超过1个结果,那么它将无效 ((SELECT pick_id,member_nr,event_id,pool_id,pick

考虑下表,其中记录了他们认为将赢得体育比赛的成员的选择/挑选

此外,为了简单起见,每个选择都是正确的。

我需要找到一种方法来检索猜测/选择正确结果的人的成员。然而:

如果两个或两个以上的成员选择了同一个团队,则返回猜测最接近分数的成员

如果两个或两个以上的成员选择了同一个得分相同的团队,则返回两个成员

我已经成功地编写了下面的代码,但是它不会返回正确的结果,如果需要返回超过1个结果,那么它将无效

((SELECT pick_id,member_nr,event_id,pool_id,pick,score, 10-score AS diff
from picks
WHERE pick = '$winner'
AND score < '$winScore'
ORDER BY score DESC

)
UNION ALL
(SELECT pick_id,member_nr,event_id,pool_id,pick,score, score-10 AS diff
FROM picks
WHERE pick = '$winner'
AND score >= '$winScore'
ORDER BY score

)
)As tmp
order by diff
";

以下为获胜分数:

SELECT score
from picks
WHERE pick = '$winner'
ORDER BY abs('$winScore' - score) ASC
LIMIT 1;
您的问题有点棘手,因为您不知道将返回多少行。这意味着该限制不能用于最终查询

您可以将上述内容合并到查询中,以获得所有获奖者:

select p.*
from picks p cross join
     (SELECT score
      from picks
      where pick = '$winner'
      order by abs('$winScore' - score) ASC
      limit 1
     ) winning
where p.pick = '$winner' and
      p.score = winning.score;

对于子查询,它是这样的:

select * from picks where pick = '$winner' and
    abs(score-$winScore) = (select min(abs(score-$winScore)) from picks 
    where pick = '$winner');

首先谢谢你的回答,其次我相信你走的是正确的道路。然而,即使我修改了您的查询,您的查询仍然没有返回任何结果,'hardcode'$winner和$winScore它仍然返回空的…很抱歉,盲代码,更新了我的答案。现在应该是正确的。让我们试一试。如果您想在查询中添加任意多的比较,我会告诉您:但是请记住,您可能需要同时添加到主查询和子查询。我100%接受了您的答案,非常感谢