嗨,我收到了关于用户浏览器的数据库日志,并显示了f.ex: Firefox 6.0.2,Firefox 6.0.0 Chrome 14.0.835.163等版本.... 还有更多
所有关于浏览器的版本。我的问题是可以做sql问题浏览器名称是什么 - > firefox(所有版本),chrome(所有版本)。我需要数他们 现在我得到了这样的东西:
SELECT `logs`.`log_browser`, COUNT(*) AS `amount`
FROM `logs` GROUP BY `log_browser`
但它将Firefox 6.0.2和Firefox 6.0.0作为不同的行返回给我 可能吗?或者我必须在php中使用结果吗?
答案 0 :(得分:2)
你可以这样做
select REPLACE(log_browser, substring_index(log_browser,' ',-1),'') log_browser,
count(*) cnt
from logs group by log_browser;
答案 1 :(得分:1)
这样的事情怎么样?这使用LOCATE
来查找第一个空格,并将分组并返回浏览器名称的左侧部分。
SELECT LEFT(log_browser, LOCATE(' ', log_browser)) AS browser, COUNT(*) AS amount
FROM logs
GROUP BY LEFT(log_browser, LOCATE(' ', log_browser))
<强>模式强>
CREATE TABLE logs ( log_browser varchar(25)); INSERT INTO logs VALUES ('Firefox 6.0.2'), ('Firefox 6.0.0'), ('Chrome 14.0.835.163')
<强>结果强>
| BROWSER | AMOUNT | --------------------- | Chrome | 1 | | Firefox | 2 |
答案 2 :(得分:0)
如果执行速度不是问题,之前给出(由其他人 - 但已删除),答案的扩展版本将非常有用。您可以添加任何其他浏览器名称,并使用OR
对不同的语法进行分组SELECT CASE
WHEN `log_browser` like '%Firefox%' Then 'FIREFOX'
WHEN `log_browser` like '%Chrome%%' Then 'CHROME'
WHEN `log_browser` like '%Explorer%' Then 'INTERNET EXPLORER'
WHEN `log_browser` like '%Opera%%' Then 'OPERA'
ELSE LEFT(log_browser,10)
END Browser, count(*) from logs
group by
CASE
WHEN `log_browser` like '%Firefox%' Then 'FIREFOX'
WHEN `log_browser` like '%Chrome%%' Then 'CHROME'
WHEN `log_browser` like '%Explorer%' Then 'INTERNET EXPLORER'
WHEN `log_browser` like '%Opera%%' Then 'OPERA'
ELSE LEFT(log_browser,10)
END
答案 3 :(得分:-1)
您可能希望在group by子句中使用substring函数,假设浏览器最多标识n个字符,例如chrome是6个字母,您可以这样做:
SELECT `logs`.`log_browser`, COUNT(*) AS `amount`
FROM `logs` GROUP BY SUBSTRING(`log_browser`,1,6)