Я анализирую некоторые журналы сервера 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. В этом случае Total Hits для Android будет 467 + 45, Blackberry будет 233 = 33 и т. Д.
Оттуда я хотел бы предоставить столбец Процент для каждого браузера, чтобы я мог представить общее количество просмотров в процентах.
Любая помощь приветствуется. Спасибо!
* UPDATE
Следовал предложению ниже, но должен был сделать несколько настроек, чтобы он корректно выполнялся LogParser. По какой-то причине Log Parser не понравилось ключевое слово LIKE в операторе CASE. Следующее работало нормально, хотя:
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