问题
我有四个游戏服务器收集数据。将数据放入单个表中。不幸的是,这导致一个玩家每个统计有四个条目。
我想要什么
我想在某些列上有一条记录和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;
答案 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都是一样的,因为这是在那里获得这些值的唯一方法。否则你也必须在它们上使用聚合函数。