ker*_*lin 1 mysql sql aggregate-functions
我有射击游戏,用户在一周内相互竞争,积累最多积分.我想写一个聚合来自镜头表的统计数据的查询.这里的表格和关系是:
在镜头表中,我有以下字段可供使用:
对于每个用户,我想返回一个带有以下聚合统计数据的结果集:
我现在已经在这个查询上工作了几个小时,但没有取得多大进展.统计功能让我兴奋不已.一位朋友建议我尝试在名为shot_records的新虚拟表中返回结果.
这是基本的解决方案,计算给定玩家的所有镜头的统计数据(您没有在每个竞赛期间指定是否需要它们):
SELECT user, SUM(IF(result = 'WON', 1, 0)) AS won_count,
SUM(IF(result = 'LOST', 1, 0)) AS lost_count,
SUM(IF(result = 'TIED', 1, 0)) AS tied_count,
COUNT(*) AS total_shots_count,
SUM(amount_won) AS total_amount_won,
(SUM(amount_won) / COUNT(*)) AS avg_amount_won_per_shot
FROM user U INNER JOIN competition_periods C ON U.user_id = C.user_id
INNER JOIN shots S ON C.competition_period_id = S.competition_period_id
GROUP BY user
Run Code Online (Sandbox Code Playgroud)
请注意,这包括计算"总赢额"数字时的负数(即总数减少损失).如果这不是您的游戏的正确算法,您将在查询中出现的两个位置更改SUM(Amount)为SUM(IF(Amount > 0, Amount, 0)).
| 归档时间: |
|
| 查看次数: |
583 次 |
| 最近记录: |