Как выбрать количество запросов только один раз повторяющиеся строки с помощью MYSQL GROUP BY?

#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)