我正在解析一些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
我想要的是這個:
Total Hits | Browser
512 | Android
256 | Blackberry
其中所有Android條目在一般Android行下計數和總計。在這種情況下Android的Total Hits爲467 + 45,黑莓將爲233 = 33等。
從那裏我想爲每個瀏覽器提供百分比列,以便我可以用百分比表示總點擊率。
任何幫助表示讚賞。謝謝!
* UPDATE
其次建議下面卻不得不爲了使一些調整它要由LOGPARSER的正確執行。出於某種原因,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
你的數據是否真的包含''AndroidA「',''AndroidB」'''',「BlackberryC」''',BlackberryD「等。或者你是否爲了這個問題簡化了數據? – Asaph
只是簡化。它們是基於版本或設備的各種用戶代理字符串......但大多數都包含類似的標識符。 – tresstylez