[英]COUNT(DISTINCT X) MySQL Query doesn't give results I need
在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
這正是我想要的。 它工作正常,速度很快。 現在,我想在IP地址上添加一個唯一的字符,以刪除訪問該頁面多次的用戶。 我在COUNT
添加了DISTINCT
,所以它看起來像這樣:
SELECT
Browser,
COUNT(DISTINCT IPAddress)
FROM page_views
WHERE PageID = 58
GROUP BY Browser;
看起來好像可行,但實際上我不認為可行。 在我的實際環境中,我確實在多個列上進行聚合,一個用於瀏覽器,一個用於一周的某天,一個用於月份,等等。因此每個都是一個查詢,但是具有不同的GROUP BY
。 我如何注意到可能不是我想要的結果是我的每個查詢都有不同的總數。 通過瀏覽器匯總視圖的總數為48,按星期幾的總數為45,按月的總數為50。 有點不對勁。
另外,如果我SELECT COUNT(DISTINCT IPAddress) FROM page_views WHERE PageID = 58
進行簡單的SELECT COUNT(DISTINCT IPAddress) FROM page_views WHERE PageID = 58
我獲得的其他綜合查詢所獲得的頁面瀏覽量要少得多。
同樣,我想要的是我在上面輸入的第一個查詢,但是對於每個IPAddress只聚合一次,因此它基本上是計算頁面的唯一查看者,而不是頁面所擁有的視圖總數。
我在做什么,或者沒有正確地做以獲得想要的結果?
謝謝。
如果您這樣做:
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
count(distinct)
的總數將與簡單查詢中的總數count(distinct)
。
如果要在同一天消除重復的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;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.