2010-10-18 92 views
0

我有一张表格,表示玩过Flash游戏的用户的分数和ID。我想返回一般用户尝试游戏的次数 - 每次他们完成“尝试”时,用户的分数和id被输入到mysql表中。该结构是 -返回列的平均金额

id int(11)      
score int(11)        
fb_id int(25) 

这给了我尝试的量为每一位用户

SELECT count(score) AS counted FROM `ifa_scores` GROUP BY `fb_id` 

,但我想是这样的

我想的时间平均量起到overall-即具有相同FB_ID的行的平均数量

回答

1

您需要获得计数o f玩过多少游戏,玩家数量的计数,加在一起并适当地分配;像

SELECT GAMES_PLAYED, 
     PLAYERS, 
     GAMES_PLAYED/PLAYERS AS AVERAGE_GAMES_PER_PLAYER 
FROM 
    (SELECT COUNT(*) AS GAMES_PLAYED FROM 'ifa_scores') g, 
    (SELECT COUNT(*) AS PLAYERS FROM (SELECT DISTINCT 'fb_id' FROM 'ifa_scores')) p; 

应该工作。或者你可以使用

SELECT AVG(GAMES_PLAYED) AS AVERAGE_GAMES_PER_PLAYER 
FROM (SELECT FB_ID, COUNT(*) AS GAMES_PLAYED 
     FROM 'ifa_scores' 
     GROUP BY 'fb_id'); 

分享和享受。

1
SELECT `fb_id`, avg(score) AS counted FROM `ifa_scores` GROUP BY `fb_id` 
+0

我想的时间平均量起到overall-即行的平均量与同FB_ID – 2010-10-18 10:50:50

+0

@克里斯,这就是GROUP BY子句的作用。 (在SELECT子句中添加fb_id可能是一个想法,这样你就可以看到哪个平均值对应于哪个fb_id。) – 2010-10-18 11:37:18

+0

@Chris Mccabe检查更新的版本 – Andrey 2010-10-18 11:55:55

2
SELECT AVG(t.counted) 
FROM 
(
    SELECT COUNT(id) AS counted 
    FROM ifa_scores 
    GROUP BY fb_id 
) AS t 
1

下面应该工作: COUNT(*)返回游戏每个用户播放数字。采取平均这应该给你你正在寻找的答案。请

SELECT fb_id,AVG(COUNT(*))上计数从ifa_scores GROUP BY fb_id