query to count number of different values?
Asked Answered
B

2

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.

Barabarabarabas answered 13/12, 2012 at 1:37 Comment(2)
+1 For a well phrased question (and searching the archives for answers first! :).Jennette
Good question, I was struggling with this exact problem.Thetes
L
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.

Lumenhour answered 13/12, 2012 at 1:47 Comment(2)
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.Barabarabarabas
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 aliasLumenhour
B
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;
Blackfish answered 13/12, 2012 at 1:55 Comment(1)
Thank you, I will try this if I have any issues with the previous solution.Barabarabarabas

© 2022 - 2024 — McMap. All rights reserved.