group-by-month给出错误结果

57hvy0tb  于 2021-06-20  发布在  Mysql
关注(0)|答案(3)|浏览(208)

我正在尝试使用以下查询获得按月份分组的唯一产品视图

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   |
+---------+

按月分组是正确的方法吗?还是我错过了什么?

unguejic

unguejic1#

如果一个访问者在两个月内浏览了一个产品,那么第一个查询将计算两次,因为 visitor_id 在这两个月内将是独一无二的。但是,第二个查询将只统计这些视图一次,因为 visitor_id 全年都是重复的。
所以,两个查询的结果都没有问题。

kmpatx3s

kmpatx3s2#

很明显,如果你算上没有日期的独特产品,你会得到16个。但是,如果你按月计算不同的产品,你可以在不同的月份有相同的产品,所以最终的数字不会匹配。如果你只是数(没有明显的)最后的数字将是相同的,即计数不同的水果是3,橙色,苹果,香蕉。如果我按月计算不同的水果,我可以在一月吃橘子和苹果,在二月吃橘子和香蕉,在三月吃橘子,苹果和香蕉。。。

jum4pzuy

jum4pzuy3#

你的问题是可以的。
因为一个访客可能已经访问了一个多月。

相关问题