2017-09-05 226 views
1

我有日期和時間的條目。我希望結果按小時(00,01,02)進行分組,但是當我想要獲得用戶的不同計數時,就會出現錯誤。Count(Distinct x)and Group By y

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 

編輯: 我使用微軟的LOGPARSER的,我能夠使用Group By Hour,因爲它是和X-Forwarded-For也沒問題。 現在的問題是我如何在組內使用Count(Distinct ip)

+1

用您正在使用的數據庫標記您的問題。 'Count(Distinct X-Forwarded-For)'是什麼?用數值表達式使用'count(distinct)'是很不尋常的。 –

+0

嘗試將'X-Forwarded-For'放入反引號中,因爲它包含特殊字符。 –

+1

你使用哪個dbms?很多dbms的具體提示在這裏......' – jarlh

回答

1

可惜LOGPARSER的不GROUP BY支持DISTINCT聚合函數在一起。這應該是從你上面的查詢得到的錯誤信息明確:

你可以做

Error: Semantic Error: aggregate functions with DISTINCT arguments are not supported with GROUP BY clauses

一個技巧是完全消除GROUP BY條款和計算,而不是COUNT DISTINCT(hourlyIp)其中hourlyIp是串聯與小時建立了一個字符串IP地址。在處理結果時,您需要將hourlyIp字段拆分回其組件。

1

大多數數據庫引擎不允許您按別名進行分組。更改此:

Group by Hour 

這樣:

Substr(time, 0, 2) 
+0

而根據ANSI SQL,只有列可能會在GROUP BY子句中列出。 – jarlh

+0

這不是問題:)但thx – jonasdero