Подтвердить что ты не робот

Выберите пользователей, имеющих более одной записи в mysql

Для таблицы, в которой хранятся записи поведения посещения веб-страниц пользователя, как я могу выбрать пользователей, которые посещают более одной веб-страницы.

Структура этих таблиц:

userId        webpageId       visitTime
  0              123            ...
  0              124            ...
  1              123            ...
 ...             ...            ...

Я могу рассчитывать, используя:

SELECT userId, COUNT(DISTINCT webpageId) AS count FROM visits GROUP BY userId;

Это дает мне результат:

userId          count
  0               2
  1               1
  2               6
 ...             ...

Как я могу исправить запрос, который дает мне конечный результат, например:

userId
  0
  2
 ...

каждый пользователь, посещающий несколько веб-страниц DISTINCT

4b9b3361

Ответ 1

просто добавьте предложение

SELECT userId, COUNT(DISTINCT webpageId) AS count 
FROM visits 
GROUP BY userId
HAVING COUNT(DISTINCT webpageId) > 1

но если вы только то, что ID

SELECT userId
FROM visits 
GROUP BY userId
HAVING COUNT(DISTINCT webpageId) > 1

причина, по которой вы отфильтровываетесь в HAVING, а не на WHERE, заключается в том, что предложение WHERE не может поддерживать столбцы, которые агрегируются.

Ответ 2

Попробуйте следующее:

SELECT userId, COUNT(DISTINCT webpageId) AS count FROM visits GROUP BY userId
having COUNT(DISTINCT webpageId) > 1

Подробнее: HAVING

Ответ 3

Хотя HAVING - хороший подход в этом случае, помните, что запросы могут быть вложенными:

SELECT userId, pageCount
FROM (
    SELECT userId, COUNT(DISTINCT webpageId) AS pageCount
    FROM visits 
    GROUP BY userId) AS n
WHERE pageCount > 1

Фактические планы запросов могут отличаться, особенно если HAVING - оптимизированный случай, но нет причин, по которым планы должны быть разными. (Сравните планы по конкретной версии РСУБД/версии, если это проблема или проблема.)