MySQL数据库中的两个表…
- players (playerid, teamid, position, firstname, lastname)
- 统计数据(统计数据,球员id,积分,年份)
假设我的基线球员有83分(即"现有值")。
我想从数据库中找到一个得分最接近83的球员。
注意:这个问题是类似的,但不涉及sum: Select最接近的数值与MySQL查询
所以这个通用方法是可行的…
select points,
abs(points - 83) as distance_from_test
from stats
order by distance_from_test
limit 1
但我的问题是,每个玩家在同一年中都有多个"积分"条目。所以我想先计算每个玩家的总得分,然后找到最接近83的总得分。这行不通,但这基本上是我想做的…
select SUM(points) as totalpoints,
abs(totalpoints - 83) as distance_from_test
from stats
order by distance_from_test
limit 1
当我尝试我得到"解析错误:语法错误,意外"(T_ENCAPSED_AND_WHITESPACE),期望标识符(T_STRING)或变量(T_VARIABLE)或数字(T_NUM_STRING)"所以我假设也许你不能与abs数学函数一起做这种类型的求和。有人能证实或否认这一点,并指出一个更明智的方向吗?
谢谢!
您需要GROUP BY player
并且您必须使用计算而不是别名:
select player,
SUM(points) as totalpoints,
abs(SUM(points) - 83) as distance_from_test
from stats
GROUP BY player
order by distance_from_test
limit 1