【问题标题】:MySQL count records and using a weightMySQL计数记录并使用权重
【发布时间】:2015-09-09 10:18:43
【问题描述】:

我的数据库中有一个名为“游戏”的表,它记录了每场比赛的信息(有多少玩家、比赛时间、比赛时间等)。

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

我正在尝试进行修改,以便根据参与游戏的玩家数量 (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')

【问题讨论】:

    标签: mysql


    【解决方案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')
    

    【讨论】:

    • 啊,非常感谢。事实证明它比我想象的要简单得多。我不知道有这样的求和函数。
    猜你喜欢
    • 2020-11-19
    • 1970-01-01
    • 1970-01-01
    • 2014-04-08
    • 2014-11-07
    • 1970-01-01
    • 2023-03-05
    • 1970-01-01
    • 2012-09-13
    相关资源
    最近更新 更多