【问题标题】:Is it possible to get all these stats with one query?是否可以通过一次查询获得所有这些统计信息?
【发布时间】:2011-05-06 07:08:53
【问题描述】:

我有一个投票评分系统,每个用户每天可以为任何产品评分(每天最多 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 

提前致谢。

【问题讨论】:

    标签: mysql statistics


    【解决方案1】:

    在您的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 
    

    【讨论】:

    • 一个细节:AVG(score)中的score不是SUM(score)中创建的score,而是保存在表格中的原始分数(你的结果列命名很不清楚)。您不能在创建其他列时使用以前创建的列。 (说清楚了吗?=))
    • 非常感谢。现在我只需要弄清楚如何处理这些数据!
    猜你喜欢
    • 1970-01-01
    • 2017-11-21
    • 1970-01-01
    • 2010-09-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-23
    • 2022-08-17
    相关资源
    最近更新 更多