2012-01-26 22 views
0

いくつかのIISサーバーログを(LogParserを使用して)解析していますが、ブラウザの各タイプ(ユーザーエージェント)の集計数がわかります。ここで複数のグループをグループ化するSQLクエリ

これまでのところ、私のクエリです:

SELECT COUNT(*) as totalHits, CS(User-Agent) as browser 
FROM E:\Logs\ex111101.log 
WHERE (CS(User-Agent) LIKE '%ipad%' 
     OR CS(User-Agent) LIKE '%iphone%' 
     OR CS(User-Agent) LIKE '%blackberry%' 
     OR CS(User-Agent) LIKE '%windows cs%' 
     OR CS(User-Agent) LIKE '%android%') 
AND cs-uri-stem LIKE '%.asp%' 
GROUP BY browser 
ORDER BY totalHits DESC 

これは私が望むように私にユーザーエージェントのリストをgivse、そして私のブラウザの各グループのヒット数を与える:

Total Hits | Browser 
467  | AndroidA 
45   | AndroidB 
23   | BlackberryC 
233  | BlackberryD 

私が欲しいのはこれです:

すべてのAndroidのエントリは、一般的なAndroidの行の下にカウントし、合計し
Total Hits | Browser 
512  | Android 
256  | Blackberry 

。この場合、Androidの合計ヒット数は467 + 45、ブラックベリーは233 = 33などとなります。

そこから、合計のヒット数をパーセンテージで表すことができるように、各ブラウザにパーセントの列を設定します。

何か助けていただければ幸いです。ありがとう!

* UPDATE

は、以下の提案に従っていますが、Log Parserツールによって正しく実行するためにはいくつかの調整をしなければなりませんでした。なんらかの理由で、Log ParserはCASEステートメントのLIKEキーワードが気に入らなかった。以下は、しかしうまく働い:

select 
case strcnt(TO_LOWERCASE(cs(user-agent)),'android') WHEN 1 THEN 'Android' else 
case strcnt(TO_LOWERCASE(cs(user-agent)),'ipad') WHEN 1 THEN 'iPad' else 
case strcnt(TO_LOWERCASE(cs(user-agent)),'blackberry') WHEN 1 THEN 'Blackberry' else 
case strcnt(TO_LOWERCASE(cs(user-agent)),'windows ce') WHEN 1 THEN 'Windows' else 
case strcnt(TO_LOWERCASE(cs(user-agent)),'iphone') WHEN 1 THEN 'iPhone' 
ELSE 'Non-Mobile' End End End End End as Browser, 
count(*) as TotalHits 
from MYLOG 
group by Browser 
order by TotalHits desc 
+1

データには本当に「AndroidA」、「AndroidB」、「BlackberryC」、「BlackberryD」などが含まれていますか?あるいは、質問の目的のためにデータを簡素化していますか? – Asaph

+0

ただ単純化しています。彼らはバージョンやデバイスに基づいてさまざまなユーザーエージェント文字列です...しかし、ほとんどの場合、同様の識別子が含まれています。 – tresstylez

答えて

7

は、オーダー尊敬によって序列の位置の代わりに、/とき、カウント(*)ケース全体を再コピーすることによって、グループ

select 
     case when cs(User-Agent) like "%android%" then "Android" 
      when cs(User-Agent) like "%black%" then "Blackberry" 
      when cs(User-Agent) like "%windows%" then "Windows" 
      when cs(User-Agent) like "%iphone%" then "iPhone" 
      else "Other" end as Browser, 
     count(*) as TotalHits 
    from 
     YourTable.logFile 
    group by 
     Browser 
    order by 
     TotalHits desc 

を試してみてください... 2列しかないので、問題はありません...

+0

実行環境がそれをサポートしているように見えるので、列が移動されると予期しない動作が発生する可能性があるため、順序記号の代わりに列名を指定することを推奨します。列の名前を変更すると、「丁寧に」何かを壊す可能性が高くなります。 –

+0

@ X-Zero、変更されました... – DRapp

+0

ありがとうDRapp - あなたの答えは、適切な構文に私を導いた!基本的に同じことをするstrcnt構文のLIKE構文を切り替えました。おそらく、通常のSQLエンジンでは動作しますが、LPエンジンでは動作しませんか?ありがとう! – tresstylez

関連する問題