2011-05-05 41 views
1

我有一个投票记分系统,每个用户每天可以对任何产品进行评分(每天最多10分,但他们每天可以在同一个产品上进行评分)。是否有可能通过一个查询获取所有这些统计信息?

我投票表的模式如下所示: 投票:ID,user_id,product_id,分数,日期。

我想要做的不仅是获取个人投票的总得分和金额(所以我可以计算出平均值),而且还可以获得当前选民的唯一金额(DISTINCT user_id's)时间范围(在本例中为一个月)。目前我的查询是:

SELECT 
    SUM(`Vote`.`score`) AS `score`, 
    COUNT(*) AS `votes`, 
    CONCAT(YEAR(`Vote`.`date`), '-', MONTH(Vote.date)) AS `month` 
FROM 
    `votes` AS `Vote` 
WHERE 
    `product_id` = 4 
GROUP BY 
    month 
ORDER BY `Vote`.`date` DESC 

在此先感谢。

回答

4

在您的SELECT列表中使用COUNT(DISTINCT user_id)

你也可以有AVG(score)计算。

SELECT 
    SUM(score) AS totalScore, 
    COUNT(*) AS totalVotes, 
    COUNT(DISTINCT user_id) AS voters, 
    AVG(score) AS averageScore, 
    CONCAT(YEAR(`date`), '-', MONTH(`date`)) AS `month` 
FROM 
    votes 
WHERE 
    product_id = 4 
GROUP BY 
    `month` 
ORDER BY `date` DESC 
+0

一个细节:'score'在'AVG(分数)'不是''中SUM score'创建(分)',而是保存在TABEL原始分数(你的结果列命名是非常不清楚)。您不能在创建其他列时使用先前创建的列。 (清楚了吗?=)) – Rudie 2011-05-05 22:56:07

+0

@Rudie;你是对的,我应该改变这个别名。 – 2011-05-05 22:59:11

+0

我说得对!有亚去 – Rudie 2011-05-05 23:03:01

相关问题