我的数据库中有一个名为" 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')
答案 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')