8

I have a table in MS Access 2003 that looks like this:


    *url            id*
    example.com    red
    example.com    blue
    example.com    blue
    other.com      red
    other.com      orange
    more.com       blue

For each URL I want to know how many unique id there are. so in this case the result should be:


    *url             count of distinct id*
    example.com          2           (because red and blue are the only values)
    other.com            2
    more.com             1

This is very similar to SQL query to count number of different values except the solution in that case does not work because it relies on COUNT DISTINCT, but that is not supported in Access. I have tried to look up alternative ways of doing count distinct in Access but I'm afraid I don't understand the answers.

So I guess this problem can be summarized as "how to simulate count distinct in msaccess".

I would greatly appreciate it if someone can give me a hint.

Community
  • 1
  • 1
Raymond
  • 140
  • 6

2 Answers2

5

This should work in MS Access 2003 (I just tested it):

SELECT url, count(id) as CountOfId
FROM
(
   SELECT distinct id, url
   FROM yourtable
) x
GROUP BY url

In this you get the distinct id and url in a subquery and then you count that result.

Taryn
  • 242,637
  • 56
  • 362
  • 405
  • Thanks very much, that does work. I removed the "x" which I believe is a typo (?) and it does the job great. I appreciate your help. – Raymond Dec 13 '12 at 02:07
  • 1
    The x was an alias for the subquery. I am used to SQL server which requires it, but it did work in access with the alias – Taryn Dec 13 '12 at 02:10
1

Here is another way of doing it without using the distinct keyword. (Although it looks like later versions of access would support it):

SELECT t.url, Count(*) AS distinct_id_count
FROM
(
    SELECT url
    FROM *source_table_name_here*
    GROUP BY url, id
) AS t
GROUP BY t.url
ORDER BY COUNT(*) DESC, t.url;
Leigh
  • 28,765
  • 10
  • 55
  • 103
DWright
  • 9,258
  • 4
  • 36
  • 53