MySQL计算记录并使用权重

时间:2015-09-09 02:13:54

标签: mysql

我的数据库中有一个名为" games"记录每场比赛的信息(有多少球员,比赛时间,比赛时间等)。

现在我查询这些信息只是为了找到每天玩了多少游戏(我把下面的查询放在了这里)。

我正在尝试进行修改,以便它能够“重量”#34;每个游戏都基于参与游戏的玩家数量(numPlayersEnd)。

即如果一个游戏有2个玩家,它应该算作1.0个游戏。如果一个游戏有3个玩家,它应该算作1.5个游戏。如果一个游戏有4个玩家,它应该算作2.0游戏。

有人知道如何在SQL查询中执行此操作吗?或者在获得查询结果后我是否必须使用java?

SELECT 
DATE_FORMAT(datetimeStart, '%H') AS hour,
DATE_FORMAT(datetimeStart, '%d') AS day,
DATE_FORMAT(datetimeStart, '%m') AS month,
DATE_FORMAT(datetimeStart, '%Y') AS year, 
COUNT(*) AS count 

FROM 
games 

WHERE 
numPlayersEnd IS NOT NULL  AND datetimeStart >= (NOW() - INTERVAL 1 YEAR)

GROUP BY 
DATE_FORMAT(datetimeStart, '%Y-%m-%d')

1 个答案:

答案 0 :(得分:1)

首先,您不是按hour进行分组,因此没有理由在select中包含该内容。实际上,select 中的汇总列应group by中的列相同。但是,这不是你如何处理这个问题。

其次,您似乎只想总结numPlayersEnd / 2。这很容易:

SELECT DATE_FORMAT(datetimeStart, '%d') AS day,
       DATE_FORMAT(datetimeStart, '%m') AS month,
       DATE_FORMAT(datetimeStart, '%Y') AS year, 
       COUNT(*) AS count ,
       SUM(numPlayersEnd / 2) as weighted_count
FROM games 
WHERE numPlayersEnd IS NOT NULL  AND datetimeStart >= (NOW() - INTERVAL 1 YEAR)
GROUP BY  DATE_FORMAT(datetimeStart, '%Y-%m-%d')