SQL-запрос для группировки нескольких групп - PullRequest
0 голосов
/ 26 января 2012

Я анализирую некоторые журналы сервера 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

1 Ответ

7 голосов
/ 26 января 2012

1001 * попробовать *

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

Группировка по и упорядочение по порядковому положению столбца вместо повторного копирования всего дела / когда и количества (*) ... Так как столбцов всего два, нет проблем ...

...