计数(Distinct x)和Group by y

时间:2017-09-05 12:16:58

标签: sql database count distinct logparser

我有日期和时间的条目。我希望结果按小时(00,01,02)进行分组,并且可以正常工作,但是当我想获得不同的用户数时,就会出现错误。

Select Substr(time, 0, 2) as Hour,
 Count(date) as Hits,
 Count(Distinct ip) as Users,
 Count(Distinct X-Forwarded-For) as ForwardedUsers
From table 
Group By Hour

编辑: 我正在使用Microsoft的LogParser,我能够原样使用Group By HourX-Forwarded-For也没问题。 问题是如何通过

在组内使用Count(Distinct ip)

2 个答案:

答案 0 :(得分:1)

大多数数据库引擎不允许您按别名分组。改变这个:

Group by Hour

到此:

Substr(time, 0, 2)

答案 1 :(得分:1)

不幸的是,LogParser不支持DISTINCT聚合函数和GROUP BY。从上面的查询得到的错误消息中可以清楚地看到这一点:

  

错误:语义错误:带有DISTINCT参数的聚合函数是   GROUP BY子句不支持

您可以做的一件事就是完全删除GROUP BY子句并改为COUNT DISTINCT(hourlyIp),其中hourlyIp是一个将小时与IP地址连接起来的字符串。然后,当您处理结果时,您必须将hourlyIp字段分解回其组件。