#mysql #sql #group-by
#mysql #sql #группировка по
Вопрос:
Я создаю очень легкое программное обеспечение для веб-аналитики. Пользователь выбирает диапазон дат и может просмотреть, сколько уникальных и возвращающихся посетителей. Я пытаюсь отображать уникальных посетителей с GROUP BY
помощью . Проблема с GROUP BY заключается в том, что она не удаляет дубликаты. Посетитель должен учитываться только один раз, даже если он посетил дважды в один и тот же день. Как это сделать?
Что у меня есть до сих пор
SELECT last_update, COUNT(ipAddress) as uniqueVisitor
FROM geolocation
WHERE last_update
BETWEEN '2020-11-01' AND '2020-12-01'
GROUP BY date(last_update)
Это возвращает
last_update | uniqueVisitor
2020-11-11 19:29:45 | 3
2020-11-13 19:53:16 | 5
Каждый IP-адрес должен учитываться только один раз в день.
Желаемый результат
last_update | uniqueVisitor
2020-11-11 19:29:45 | 2
2020-11-13 19:53:16 | 3
Ответ №1:
Используйте count(distinct)
:
SELECT last_update, COUNT(DISTINCT ipAddress) as uniqueVisitor
FROM geolocation
WHERE last_update BETWEEN '2020-11-01' AND '2020-12-01'
GROUP BY date(last_update);
Я бы рекомендовал не использовать только last_update
в SELECT
— запрос должен выдать ошибку. Вместо:
date(last_update)
min(last_update)
max(last_update)