Можно ли получить всю эту статистику одним запросом? - PullRequest
1 голос
/ 06 мая 2011

У меня есть система подсчета голосов, каждый пользователь может оценивать любой продукт каждый день (максимум 10 баллов в день, но они могут использовать один и тот же продукт каждый день).

Схема для моего голосованияТаблица выглядит следующим образом: Проголосовать: 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 

Заранее спасибо.

1 Ответ

4 голосов
/ 06 мая 2011

Используйте COUNT(DISTINCT user_id) в вашем SELECT списке.

Вы также можете рассчитать 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 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...