使用SQL计算每个类别的唯一IP地址数量

时间:2018-04-22 13:26:57

标签: sql ms-access

我正在自学SQL和Access 2016,现在我正在尝试执行以下操作:

我有两个表,Table1包含URI和类别列表,Table2包含URI和IP列表。现在我想知道列表中每个类别有多少不同的IP。表1的URI列是表2的URI列的子集。

Table 1:
URI | Categories

Table 2: 
URI | IP

所以显然我应该在两个表上使用URI来进行内连接:

URI | Categories | IP

现在我需要找出每个类别有多少不同的IP。因此,例如,如果类别是" Boats"我想知道有多少不同的IP寻找该类别。我相信这可以用COUNT来完成,但这只适用于1个单一类别吗?我想弄清楚每个类别在一个巨大的数据集(数百万行)中有多少不同的IP,所以不仅仅是一个类别。

基本上我想要获得的是这样的输出:

Category | # of unique IP's
___________________________
Boats    | 5
Insects  | 22

这个问题可能有点简单和老实说我现在一直在考虑它/谷歌搜索一整天,因为这个问题似乎太简单了,但我现在只是卡住了。

提前感谢您的帮助!

P.S。如果您需要更多示例或解释我尝试做什么,请告诉我,我会得到它! :)

编辑:

我忘了使用DISTINCT ..所以我刚刚添加了,但现在我在Access 2016中出现了语法错误?这是我的SQL查询:

SELECT Count(DISTINCT Final_parsed_userlogs_access.Field1) AS CountOfField1, Final_category_list_all_uri_access_edited.Field2
FROM Final_category_list_all_uri_access_edited INNER JOIN Final_parsed_userlogs_access ON Final_category_list_all_uri_access_edited.Field1 = Final_parsed_userlogs_access.Field4
GROUP BY Final_category_list_all_uri_access_edited.Field2;

小决赛编辑: 显然,Access 2016并不适用于Count distinct(Select Distinct in Access? Syntax error),但我不明白我应该如何编辑自己的查询以使用此修复程序?

1 个答案:

答案 0 :(得分:1)

根据类别对其进行分组,这应该有所帮助!

Access-Engine不支持

SELECT count(DISTINCT....) FROM ...

你必须这样做:

SELECT count(*) 
FROM
(SELECT DISTINCT Name FROM table1)

将您的查询编辑为:

    SELECT Count(T.Field1) AS CountOfField1, T.Field2
     FROM
    (SELECT Final_parsed_userlogs_access.Field1, Final_category_list_all_uri_access_edited.Field2
    FROM Final_category_list_all_uri_access_edited INNER JOIN Final_parsed_userlogs_access ON Final_category_list_all_uri_access_edited.Field1 = Final_parsed_userlogs_access.Field4
    GROUP BY Final_category_list_all_uri_access_edited.Field2, Final_parsed_userlogs_access.Field1) as T
    GROUP BY T.Field2;

希望它有所帮助。