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.*,

我想计算从数据库返回的最大值与返回的行值之间的差值

示例数据

  • 四百
  • 三百
  • 二百
  • 一百
  • 最大值(返回值)=400

    返回的结果应为:

  • 0(最大值和行值之间没有差异)
  • 一百
  • 二百
  • 三百
  • 有什么想法可以实现吗

    这是我当前使用的mySQL语句:

    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似乎做了一个隐式限制-你只能得到一行(使用第一个用户名和最大点数)在子选择中。请参阅我的答案以了解工作变量。我最初认为连接条件是不必要的,但它实际上会导致在尝试进行支持连接条件的子选择时出现问题