2013-03-15 69 views
1

我需要找出每天唯一visitirs的数量,我有数据的基础是这样的:唯一访问者查询

UID clicks date 
6046 9 2013-03-06 
6449 7 2013-03-06 
6450 41 2013-03-06 
664  2 2013-03-07 
2432 36 2013-03-07 
3246 11 2013-03-07 
6031 52 2013-03-07 

现在我需要找到是计算每个唯一访问者的数量天。我发现这一点以及当天的点击总和。所以查询是这样的:

SELECT date,SUM(clicks) as new_clicks,COUNT(DISTINCT uID) as unique_clicks 
FROM uc_user 
WHERE date <='2013-03-15' GROUP BY date; 

但在这里我得到错误的结果。计数使用

SELECT date, COUNT(DISTINCT uID) AS unique_clicks 
FROM uc_user 
WHERE date <= '2013-03-15' 
GROUP BY date 
LIMIT 0 , 30 

是什么这些查询之间的区别,哪一个是用于显示独立访问者人数正确的是,我为相同的时间间隔计算出的数不同?

其实我在PHP实际查询是这样的:

SELECT date,SUM(clicks) as new_clicks,COUNT(uID) as unique_clicks 
FROM currencyclick_user 
WHERE date BETWEEN '$from' AND '$to' 
GROUP BY date 

SELECT SUM(clicks) as total_new_clicks, 
     COUNT(DISTINCT uID) as total_new_uniqueclicks 
FROM currencyclick_user 
WHERE date BETWEEN '$from' AND '$to' 

但对于相同的范围,它显示不同的值。我的意思是总和查询显示的总数比通过在第一个查询中添加计数所得到的值显示的总数要多。

+0

你的用户ID的数量看起来这两个查询相同。它应该工作正常。查询是否发布了导致问题的实际查询,还是简化的查询? – 2013-03-15 11:56:13

+0

因为所有的id都是唯一的,所以2013-03-06应该是3,2013-03-07应该是4。如果一个UID重复,它不应该添加。也就是说,如果一个ID,它是664在2013年3月6日的条目,它不应该在任何接下来的几天考虑计数 – 2013-03-15 11:57:00

+0

我发现了同样的。看到这里,http://www.sqlfiddle.com/#!2/8cfb2/3(*您必须更新记录*) – 2013-03-15 12:01:35

回答

0

既然你已经更新了你的问题,这两个查询你的问题的最下面是因为在第一个非常不同的,你已经按日期,虽然你没有第二个分组的记录。第一个查询将返回每天的不同记录,而第二个查询将仅返回一条记录,因为您尚未确定要对哪个列进行分组的查询。

如果你在不包含GROUP BY子句的语句中使用的一组功能,它相当于对所有行分组。


更新1

SELECT SUM(new_clicks) totalClicks, 
     SUM(unique_clicks) totalUnique 
FROM 
    (
     SELECT date, 
       SUM(clicks) as new_clicks, 
       COUNT(uID) as unique_clicks 
     FROM currencyclick_user 
     WHERE date BETWEEN '$from' AND '$to' 
     GROUP BY date 
    ) subQ 
+0

其实我所需要的是总数。我的意思是在特定的愤怒中独特的访问者总数,我该怎么做? – 2013-03-15 12:10:42

+0

好的,看我更新的答案。你需要把它放在一个子查询 – 2013-03-15 12:13:23

0

要找到一个独特的范围内的访问总人数尝试此查询

SELECT SUM(clicks) totalClicks, 
    count(distinct UID) totalUnique 
FROM 
(
    SELECT UID,dtm,clicks 
    FROM currencyclick_user 
    WHERE dtm BETWEEN '2013-03-06' AND '2013-03-07' 
) as allclicks 
+0

里面,但我认为在子查询时,它选择从给出的游客period.So它可能不会给独立访客数在整个时期。我的意思是这不会检查,如果在给定范围之前重复UID。 – 2013-03-18 06:26:59

+0

是的内部查询没有,但外部查询为该时期提供了独特的记忆。 – 2013-03-18 08:56:45