Я анализирую некоторые журналы сервера 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 и т. д.
Оттуда я хотел бы предоставить столбец Percent для каждого браузера, чтобы я мог представить общее количество обращений в процентах.
Любая помощь приветствуется. Спасибо!
*ОБНОВЛЕНИЕ
Следовал приведенному ниже предложению, но ему пришлось внести несколько изменений, чтобы 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
"AndroidA"
,"AndroidB"
,"BlackberryC"
,"BlackberryD"
и т. д.? Или вы упрощаете данные для целей вопроса? - person Asaph   schedule 26.01.2012