For a table that holds the records of user\'s webpages visiting behavior, how can I select users that visit more than one webpages.
The structure of this tables is:<
just add having clause
SELECT userId, COUNT(DISTINCT webpageId) AS count
FROM visits
GROUP BY userId
HAVING COUNT(DISTINCT webpageId) > 1
but if you only what the ID
SELECT userId
FROM visits
GROUP BY userId
HAVING COUNT(DISTINCT webpageId) > 1
the reason why you are filtering on HAVING
clause and not on WHERE
is because, WHERE
clause cannot support columns that where aggregated.
Try this:
SELECT userId, COUNT(DISTINCT webpageId) AS count FROM visits GROUP BY userId
having COUNT(DISTINCT webpageId) > 1
More: HAVING
While HAVING
is a good approach in this case, remember that queries can be nested:
SELECT userId, pageCount
FROM (
SELECT userId, COUNT(DISTINCT webpageId) AS pageCount
FROM visits
GROUP BY userId) AS n
WHERE pageCount > 1
The actual query plans may differ, especially if HAVING
is an optimized case, but there is no reason why the plans must be different. (Compare plans on the specific RDBMS/version if it is an issue or concern.)