2011-05-05 17 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

相關問題