3

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

我想要什么我想要
在某些列上有一条记录和 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; 
4

2 回答 2

5

您可以按非聚合字段(即名称、类、字符 ID)进行分组,而不是使用 distinct。这样你就可以使用你的聚合:max,sum,你仍然会有你独特的角色!

于 2012-05-01T02:04:51.223 回答
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
;

我假设每个玩家的姓名、职业、角色 ID 都是相同的,因为这是获取这些值的唯一方法。否则,您还必须对它们使用聚合函数。

于 2012-05-01T02:08:07.837 回答