J'analyse certains journaux de serveur IIS (avec LogParser) et j'ai un peu de mal à créer une requête qui me donnera le nombre total de chaque type de navigateur (agent utilisateur).Requête SQL pour regrouper plusieurs groupes
Voici ma requête à ce jour:
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
Cela me givse une liste des agents utilisateurs comme je veux, et me donne un nombre de succès pour chaque groupe de navigateur:
Total Hits | Browser
467 | AndroidA
45 | AndroidB
23 | BlackberryC
233 | BlackberryD
Ce que je veux est CE:
Total Hits | Browser
512 | Android
256 | Blackberry
Où Toutes les entrées Android sont comptées et totalisées sous une ligne Android générique. De là, Total Hits pour Android serait 467 + 45, Blackberry serait 233 = 33, etc.
De là, je voudrais fournir une colonne Percent pour chaque navigateur afin que je puisse représenter le total des hits en pourcentage.
Toute aide est appréciée. Merci!
* MISE À JOUR
a suivi la suggestion ci-dessous, mais a dû faire quelques ajustements afin qu'il soit exécuté correctement par LogParser. Pour une raison quelconque, Log Parser n'a pas aimé le mot-clé LIKE dans l'instruction CASE. Ce qui suit a bien fonctionné si:
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
Vos données contiennent-elles vraiment '" AndroidA ",' 'AndroidB" ',' "BlackberryC" ',' "BlackberryD" ', etc.? Ou simplifiez-vous les données pour les besoins de la question? – Asaph
Simplifier simplement. Ils sont une variété de chaînes d'agent utilisateur basées sur la version ou le périphérique ... mais la plupart contiennent un identifiant similaire. – tresstylez