MYSQL获取两个值之间的差异
我想计算从数据库返回的最大值与返回的行值之间的差值 示例数据MYSQL获取两个值之间的差异,mysql,sql,Mysql,Sql,我想计算从数据库返回的最大值与返回的行值之间的差值 示例数据 四百 三百 二百 一百 最大值(返回值)=400 返回的结果应为: 0(最大值和行值之间没有差异) 一百 二百 三百 等 有什么想法可以实现吗 这是我当前使用的mySQL语句: SELECT userName, totalPoints , (totalPoints) AS gap FROM userTable WHERE value='1' ORDER BY totalPoints DESC s试试这个: SELECT a.*,
SELECT userName, totalPoints , (totalPoints) AS gap
FROM userTable
WHERE value='1'
ORDER BY totalPoints DESC
s试试这个:
SELECT a.*, b.maxTotalPoints - a.totalPoints as gap
from userTable a
INNER JOIN
( SELECT userName, max(totalPoints) as maxTotalPoints
FROM userTable
) b on (a.userName = b.userName)
WHERE a.value='1'
ORDER BY a.totalPoints DESC
试试下面这个
SELECT A.MaxtotalPoints - A.totalPoints AS GAP
FROM
(
SELECT userName, totalPoints , MAX(totalPoints) MaxtotalPoints
FROM userTable
WHERE value='1'
) A
ORDER BY GAP;
实际上,我并不是建议您使用此解决方案,但您可以通过MySQL黑客实现这一点:
SELECT userName, totalPoints,
( totalpoints - if(@totalpoints = -1, (@totalpoints := totalpoints), totalpoints) ) AS gap
FROM userTable ut cross join
(select @totalpoints := -1) vars
WHERE value = '1'
ORDER BY totalPoints DESC;
通常我更喜欢标准的SQL解决方案(即使用计算出的
max()
值),但我意识到这也会起作用。假设您想要所有用户的该用户点与最大值之间的差值,但只需要一个用户的数据,那么这就行了:
SELECT x.*,MAX(y.data)-x.data FROM my_table x,my_table y GROUP BY x.id;
select u.username, u.totalpoints, m.m - u.totalpoints as gap
from usertable u
join ( select max(totalpoints) as m from usertable) m
where u.username = 4
如果希望为所有用户提供间隙,也可以在不带where条件的情况下运行
如果这不是你想要的,那么你需要更好地解释你想要什么。我认为
(MAX(totalPoints)-totalPoints)作为gap
会起作用。你试过了吗?不清楚最大值应该是整个表的,还是只应该是value='1'的行的。你应该在适当的位置添加where
子句来真正回答这个问题。嗯,我本来希望它能工作,但MySql似乎做了一个隐式限制-你只能得到一行(使用第一个用户名和最大点数)在子选择中。请参阅我的答案以了解工作变量。我最初认为连接条件是不必要的,但它实际上会导致在尝试进行支持连接条件的子选择时出现问题