Mysql ABS函数代码中未解释的错误
考虑以下查询:Mysql ABS函数代码中未解释的错误,mysql,Mysql,考虑以下查询: SELECT p . * FROM multiple_picks p WHERE p.event_id = '3303' AND p.pick = 'Highlanders' AND ABS( p.score - '8' ) = ( SELECT MIN( ABS( p2.score -1 ) ) FROM multiple_picks p2 WHERE p2.pick = p.pick AND p2.event_id = p.event_id ) 上述查询应返回选
SELECT p . *
FROM multiple_picks p
WHERE p.event_id = '3303'
AND p.pick = 'Highlanders'
AND ABS( p.score - '8' ) = (
SELECT MIN( ABS( p2.score -1 ) )
FROM multiple_picks p2
WHERE p2.pick = p.pick
AND p2.event_id = p.event_id )
上述查询应返回选择了正确团队的成员和最接近选择分数的成员。如果是平局-应返回多个成员强>
当我对下表运行上述查询时,命名为multiple_picks:
我得到了以下结果:
我的问题
返回的结果不正确,您可以清楚地看到
因为获胜的队伍是得分为8的高地人队(如查询中所示)
应该返回的正确结果是第2行(选择高地人10分的成员!)
任何关于我为什么会得到这个不正确的结果,或者我做错了什么的建议都将不胜感激!这件事已经拖了好几天了
这里的问题是p.score-(const)与p2.score-1进行比较,这是不一致的 这是我的想法(如果我理解正确的话) 假设您有变量(或类似的变量): T=‘高地人’ S=8 这意味着您需要找到具有
p.pick=T
且p.score最接近S的条目
下面是您要做的(将硬编码值替换为上述变量,以避免偏离问题的本质):
你的逻辑似乎有缺陷。如果您需要最接近选择8的人,那么您需要
p的成员。分数-8
最接近0,而不是最接近最小值-1的人。@apokryfos谢谢您,这是我需要检查的区域,你可能对p.score-8应该改成什么有什么建议吗?p.score-8
很好,内部的min应该是min(ABS(p2.score-8))
这样比较like和like。@apokryfos你介意看看postBIngo下面的mysql fiddle链接吗!显然,硬编码的值将被php变量替换……但是运行代码我得到了正确的结果。非常感谢你!!
SELECT p . *
FROM multiple_picks p
WHERE p.event_id = '3303'
AND p.pick = T
AND ABS(p.score - S) = (
SELECT MIN(ABS(p2.score - S))
FROM multiple_picks p2
WHERE p2.pick = p.pick
AND p2.event_id = p.event_id
)