В 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-адресу удалить пользователей, которые просматривали страницу более одного раза.Я добавил DISTINCT
в COUNT
, чтобы это выглядело так:
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
, я получу гораздо меньше просмотров страниц, чем другие агрегатные запросы в целом.
Опять же, первое, что я хочузапрос, который я поставил выше, но агрегирует только один раз для каждого IP-адреса, так что он в основном вычисляет уникальных зрителей страницы, а не общее количество просмотров страницы.
Что я делаю или неправильно делаю, чтобы получить результатыХочу?
Спасибо.