我正在解析一些 IIS 服务器日志(使用 LogParser),并且在创建一个查询时遇到了一些麻烦,该查询将为我提供每种类型的浏览器(用户代理)的总计数。
到目前为止,这是我的查询:
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
这给了我一个我想要的用户代理列表,并给了我每组浏览器的命中数:
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,Blackberry 为 233 = 33,以此类推。
从那里我想为每个浏览器提供一个百分比列,这样我就可以将总点击率表示为百分比。
任何帮助表示赞赏。谢谢!
*更新
遵循下面的建议,但必须进行一些调整才能让 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