2017-09-05 23 views
1

私には日付と時刻のエントリがあります。私は結果を時間(00、01、02)でグループ化して動作させたいと思っていますが、ユーザーの個数を取得したいときはエラーがあります。Count(Distinct x)とグループ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 

EDIT: 私はマイクロソフトからLog Parserツールを使用していますが、私はそれがあるとX-Forwarded-Forも問題ありませんようGroup By Hourを使用することができています。 問題は、グループ内でCount(Distinct ip)を使用する方法です。

+1

ご使用のデータベースでご質問ください。 「Count(Distinct X-Forwarded-For)」とは何ですか?数値式で 'count(distinct) 'を使うのは珍しいことです。 –

+0

'X-Forwarded-For'を特殊文字を含んでいるので、バッククォートに入れてみてください。 –

+1

どのdbmsを使用していますか?多くのdbms固有のヒントがここにあります... ' – jarlh

答えて

1

:これまで

Group by Hour 

:これを変更します。これは、上記のクエリで取得したエラーメッセージから明らかになっている必要があります:あなたができる

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

1つのトリックは完全にGROUP BY句を削除し、hourlyIpはとの時間を連結建て文字列です代わりにCOUNT DISTINCT(hourlyIp)を計算することですIPアドレス。結果を処理するときにhourlyIpフィールドをコンポーネントに分割し直す必要があります。

1

ほとんどのデータベースエンジンでは、別名でグループ化することはできません。残念ながら、Log ParserツールはGROUP BYDISTINCT集約関数を一緒にサポートしていません

Substr(time, 0, 2) 
+0

そして、ANSI SQLによれば、列はGROUP BY句に列挙されるだけです。 – jarlh

+0

これは問題ではありません:)しかし、 – jonasdero

関連する問題