Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
COUNT(DISTINCT X)MySQL查询没有给出我需要的结果_Mysql_Count_Group By_Distinct - Fatal编程技术网

COUNT(DISTINCT X)MySQL查询没有给出我需要的结果

COUNT(DISTINCT X)MySQL查询没有给出我需要的结果,mysql,count,group-by,distinct,Mysql,Count,Group By,Distinct,在MySQL中,我有一个查询来统计我要聚合的page_views表中的所有浏览器。我的问题是: SELECT Browser, COUNT(*) FROM page_views WHERE PageID = 58 GROUP BY Browser; 例如: Chrome 14 Firefox 17 Internet Explorer 9 Opera 5 Safari 3 ----------

在MySQL中,我有一个查询来统计我要聚合的page_views表中的所有浏览器。我的问题是:

SELECT
    Browser,
    COUNT(*)
FROM page_views
WHERE PageID = 58
GROUP BY Browser;
例如:

Chrome 14 Firefox 17 Internet Explorer 9 Opera 5 Safari 3 -------------------- Total 48 这看起来是可行的,但实际上,我不认为可行。在我的真实环境中,我在多个列上进行聚合,一个用于浏览器,一个用于星期几,一个用于月份等等。。。因此,每个查询都是一个查询,但分组方式不同。我是如何注意到这可能不是我想要的结果的,是我的每一个查询都有一个不同的总数。按浏览器聚合视图可获得48个总视图,按周计算可获得45个总视图,按月计算可获得50个总视图。有点不对劲

另外,如果我从PageID=58的页面视图中简单地选择COUNTDISTINCT IPAddress,我得到的页面视图比其他聚合查询的总页面视图少得多

同样,我想要的是我在上面提出的第一个查询,但每个IP地址只聚合一次,因此它基本上计算页面的唯一浏览者,而不是页面的总浏览量

为了得到我想要的结果,我在做什么,或者做得不正确

谢谢。

如果您愿意:

SELECT
    Browser,
    day_of_the_week,
    month_of_the_year,
    COUNT(DISTINCT IPAddress)
FROM page_views
WHERE PageID = 58
GROUP BY Browser, day_of_the_week,month_of_the_year
countdistinct的总数将与简单查询中的总数不同

如果您想在同一天消除重复的IP地址,则需要以下内容:

SELECT 
  p1.Browser
  , p1.pageID
  , p1.WEEKDAY(`date`) as day_of_week
  , p1.MONTH(`date`) as The_month
  , COUNT(p2.Unique_visitors_this_day) as uniqueviews
FROM page_views p1
LEFT JOIN (SELECT id, 1 as Unique_visitors_this_day FROM page_views pv1
           LEFT JOIN page_views pv2 ON (pv1.id > pv2.id 
                                     AND pv1.ipaddress = pv2.ipaddress
                                     AND pv1.`date` = pv2.`date`)
           WHERE pv2.id IS NULL) as p2
       ON (p1.id = p2.id)
 WHERE p1.PageID = 58
 GROUP BY p1.Browser, p1.day_of_week, p1.The_month;
如果您这样做:

SELECT
    Browser,
    day_of_the_week,
    month_of_the_year,
    COUNT(DISTINCT IPAddress)
FROM page_views
WHERE PageID = 58
GROUP BY Browser, day_of_the_week,month_of_the_year
countdistinct的总数将与简单查询中的总数不同

如果您想在同一天消除重复的IP地址,则需要以下内容:

SELECT 
  p1.Browser
  , p1.pageID
  , p1.WEEKDAY(`date`) as day_of_week
  , p1.MONTH(`date`) as The_month
  , COUNT(p2.Unique_visitors_this_day) as uniqueviews
FROM page_views p1
LEFT JOIN (SELECT id, 1 as Unique_visitors_this_day FROM page_views pv1
           LEFT JOIN page_views pv2 ON (pv1.id > pv2.id 
                                     AND pv1.ipaddress = pv2.ipaddress
                                     AND pv1.`date` = pv2.`date`)
           WHERE pv2.id IS NULL) as p2
       ON (p1.id = p2.id)
 WHERE p1.PageID = 58
 GROUP BY p1.Browser, p1.day_of_week, p1.The_month;

IPAddress是否包含空值?这意味着同一用户使用不同的浏览器访问页面,这是否有问题?是否为每个页面视图插入新记录?如果只有一个用户每小时查看一次pageID 58,10次,则SELECT COUNTDISTINCT IPAddress将为1,而SELECT Browser,COUNT*将为10。这和你提到的不一致吗?@Scorpi0也许这就是我得到不同结果的原因。那么,我猜查询说我有一个用户用Safari和Chrome浏览了这个页面?你想要哪一个?我还不如把这两个都包括进去。是吗?@AzizShaikh是的,这就是我想要的行为。IPAddress是否包含空值?这意味着同一用户使用不同的浏览器访问页面,这是一个问题吗?是否为每个页面视图插入新记录?如果只有一个用户每小时查看一次pageID 58,10次,则SELECT COUNTDISTINCT IPAddress将为1,而SELECT Browser,COUNT*将为10。这和你提到的不一致吗?@Scorpi0也许这就是我得到不同结果的原因。那么,我猜查询说我有一个用户用Safari和Chrome浏览了这个页面?你想要哪一个?我还不如把这两个都包括进去。是吗?@AzizShaikh是的,这就是我想要的行为。