我正在尝试使用以下查询获得按月份分组的唯一产品视图
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条答案
按热度按时间unguejic1#
如果一个访问者在两个月内浏览了一个产品,那么第一个查询将计算两次,因为
visitor_id
在这两个月内将是独一无二的。但是,第二个查询将只统计这些视图一次,因为visitor_id
全年都是重复的。所以,两个查询的结果都没有问题。
kmpatx3s2#
很明显,如果你算上没有日期的独特产品,你会得到16个。但是,如果你按月计算不同的产品,你可以在不同的月份有相同的产品,所以最终的数字不会匹配。如果你只是数(没有明显的)最后的数字将是相同的,即计数不同的水果是3,橙色,苹果,香蕉。如果我按月计算不同的水果,我可以在一月吃橘子和苹果,在二月吃橘子和香蕉,在三月吃橘子,苹果和香蕉。。。
jum4pzuy3#
你的问题是可以的。
因为一个访客可能已经访问了一个多月。