GROUP BY MONTH дает неверный результат - PullRequest
0 голосов
/ 31 мая 2018

Я пытаюсь получить уникальные просмотры товаров, сгруппированные по месяцам, используя следующий запрос

SELECT
  Month(timestamp)           AS 'month',
  COUNT(DISTINCT visitor_id) AS 'unique'
FROM productviews pv INNER JOIN products p ON pv.product_id = p.id
WHERE p.vendor_id = 8 AND YEAR(timestamp) = 2018
GROUP BY month(timestamp);

И я получаю

+---------+--------+
| month   | unique |
+---------+--------+
|    1    |  3     |
+---------+--------+
|    2    |  10    |
+---------+--------+
|    3    |  2     |
+---------+--------+
|    4    |  4     |
+---------+--------+

Но общее количество уникальных просмотров товаров меньшечем сумма предыдущего запроса

SELECT count(DISTINCT pv.visitor_id)
FROM productviews pv INNER JOIN products p ON pv.product_id = p.id
WHERE p.vendor_id = 8 AND year(timestamp) = 2018

+---------+
|  count  |
+---------+
|    16   |
+---------+

Правильно ли использовать группу по месяцам?Или я что-то пропустил?

Ответы [ 3 ]

0 голосов
/ 31 мая 2018

Если посетитель просматривал товар в течение 2 разных месяцев, то первый запрос будет учитывать его дважды, поскольку visitor_id будет уникальным в течение этих двух месяцев.Однако во втором запросе эти просмотры будут учитываться только один раз, поскольку visitor_id дублируется в течение всего года.

Таким образом, нет ничего плохого в результатах любого из запросов.

0 голосов
/ 31 мая 2018

Понятно, что если вы посчитаете разные продукты без дат, вы получите 16. Однако если вы посчитаете разные продукты по месяцам, у вас может быть один и тот же продукт в разные месяцы, поэтому итоговое число не будет совпадать.Если вы просто посчитаете (без различий), то итоговое число будет таким же, как и IE. Счетчик для фруктов: 3, апельсин, яблоко, банан.Если я посчитаю разные фрукты по месяцам, у меня может быть апельсин и яблоко в январе, апельсин и банан в феврале, апельсин, яблоко и банан в марте ...

0 голосов
/ 31 мая 2018

Ваш запрос в порядке.

Поскольку посетитель мог посещать более одного месяца.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...