我需要找出每天唯一访问者的数量,我有这样的数据库:
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 :(得分: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
答案 1 :(得分: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