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

时间:2012-05-01 01:59:47

标签: 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; 

2 个答案:

答案 0 :(得分:5)

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

答案 1 :(得分:5)

首先让我说数据库中的重复行真的不太理想。 fully normalized数据库使数据更易于操作,而不会弹出随机异常。

但是,要回答你的问题,这就是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
;

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