我正在尝试使用以下查询获取按月分组的唯一产品视图
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 |
+---------+
这是逐月使用的正确方法吗?或者我会错过什么吗?
答案 0 :(得分:7)
您的查询没问题。
因为访客可以访问超过一个月。
答案 1 :(得分:6)
如果访问者在2个月内查看了某个产品,那么第一个查询会将其计算两次,因为visitor_id
在这两个月内将是唯一的。但是,第二个查询只计算一次这些视图,因为visitor_id
在整个一年中都是重复的。
因此,任何一个查询的结果都没有错。
答案 2 :(得分:1)
很明显,如果算上没有日期的独特产品,你会得到16。 但是,如果按月计算不同的产品,则可以在不同月份使用相同的产品,因此最终的数字将不匹配。 如果你只计算(没有明显),最终的数字将是相同的 I.E.水果的数量分别为3,橙,苹果,香蕉。如果我按月计算不同的水果,我可以在1月份吃橘子和苹果,2月份吃橘子和香蕉,3月份吃橙子,苹果和香蕉......