SQL查询:在一个语句中使用DISTINCT/UNIQUE和SUM()

And*_*rew 3 sql sum max distinct sql-like

问题
我有四个游戏服务器收集数据.将数据放入单个表中.不幸的是,这导致一个玩家每个统计有四个条目.

我想要什么我
想在某些列上有一条记录和SUM().

我将发表一篇我写的声明,但这些声明不起作用,但你会明白我想要完成的事情.

SELECT DISTINCT( Name ), 
               Max(Level), 
               Class, 
               Sum(Kills), 
               Sum(Deaths), 
               Sum(Points), 
               Sum(TotalTime), 
               Sum(TotalVisits), 
               CharacterID 
FROM   Characters 
WHERE  Name LIKE '$value%' 
        OR CharacterID LIKE '$value' 
ORDER  BY Name ASC; 
Run Code Online (Sandbox Code Playgroud)

dwe*_*iss 5

您可以按非聚合字段(即name,class,characterid)进行分组,而不是使用distinct.这样你就可以使用你的聚合:max,sum,你仍然会有你的不同角色!


Tim*_*ote 5

首先让我说数据库中的重复行真的不太理想.一个完全规范化的数据库,使数据更容易操作,而无需随机异常弹出.

但是,要回答你的问题,这就是dweiss所说的代码(使用group by):

SELECT
  name,
  MAX(Level),
  Class,
  SUM(Kills),
  SUM(Deaths),
  SUM(Points),
  SUM(TotalTime),
  SUM(TotalVisits),
  CharacterID
FROM
  Characters
WHERE
  Name LIKE '$value%' OR CharacterID LIKE '$value'
GROUP BY
  name,
  class,
  characterid
ORDER BY
  Name ASC
;
Run Code Online (Sandbox Code Playgroud)

我假设每个玩家的名字,类,角色ID都是一样的,因为这是获得那些值的唯一方法.否则你也必须在它们上使用聚合函数.

  • 谢谢,我对StackedOverflow的风格很愚蠢.OP - Tim在这里肯定是正确的,因为规范化的数据库将使事情变得更容易,并且几乎总是更加优化.目前,Tim写的查询应该没有缺陷,但你可能想要阅读更多关于SQL的内容,并且可能花一些时间绘制一个模式 - 总是有用的. (2认同)