Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在MYSQL中选择按regex分组统计数据?_Mysql_Sql - Fatal编程技术网

如何在MYSQL中选择按regex分组统计数据?

如何在MYSQL中选择按regex分组统计数据?,mysql,sql,Mysql,Sql,我有一个保存用户地理位置信息的表。如何通过创建正则表达式来计算使用相同设备的用户数 质疑 结果 userAgent | countVisitor Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:82.0) G...| 1 Mozilla/5.0 (iPad; CPU OS 11_0 like Mac OS X) Appl...| 1 Mozilla/5.0 (iPad; C

我有一个保存用户地理位置信息的表。如何通过创建正则表达式来计算使用相同设备的用户数

质疑

结果

userAgent                                            | countVisitor
Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:82.0) G...| 1
Mozilla/5.0 (iPad; CPU OS 11_0 like Mac OS X) Appl...| 1
Mozilla/5.0 (iPad; CPU OS 11_4 like Mac OS X) Appl...| 1
Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac O...| 1
Mozilla/5.0 (Linux; Android 7.0; SM-G892A Build/NR...| 1
Array ( [Linux] => 2 [Mac OS X] => 4 [Android] => 4 [Windows] => 1 ) 
期望结果

userAgent   | countVisitor
Ubuntu      | 1
iPad        | 2
iPhone      | 1
Android     | 1

嗯。我看不出一种模式可以真正使用。您可以使用
大小写
表达式:

SELECT (CASE WHEN userAgent LIKE '%Ubuntu%' THEN 'Ubuntu'
             WHEN userAgent LIKE '%iPad%' THEN 'iPad'
             WHEN userAgent LIKE '%iPhone%' THEN 'iPhone'
             WHEN userAgent LIKE '%Android%' THEN 'Android'
             ELSE 'Other'
        end) as platform,COUNT(DISTINCT ipAddress) as countVisitor 
FROM geolocation 
WHERE last_update BETWEEN '2020-11-01' AND '2020-12-01' 
GROUP BY platform
ORDER BY MIN(last_update) ASC 

我提出了一个非常难看的PHP解决方案,使用并将数据推送到数组中。这对我想做的事很有效。无论如何,我从中检索用户代理。它通常返回一个与此类似的字符串

Mozilla/5.0(Linux;Android 7.0;SM-G892A构建/NRD90M;wv) AppleWebKit/537.36(KHTML,类似Gecko)版本/4.0 Chrome/67.0.3396.87 Mobile Safari/537.36

仅从该字符串,您就可以检索所需的任何信息(设备、浏览器等)

质疑

结果

userAgent                                            | countVisitor
Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:82.0) G...| 1
Mozilla/5.0 (iPad; CPU OS 11_0 like Mac OS X) Appl...| 1
Mozilla/5.0 (iPad; CPU OS 11_4 like Mac OS X) Appl...| 1
Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac O...| 1
Mozilla/5.0 (Linux; Android 7.0; SM-G892A Build/NR...| 1
Array ( [Linux] => 2 [Mac OS X] => 4 [Android] => 4 [Windows] => 1 ) 

提取用户代理的规则是什么?这并不明显。
Array ( [Linux] => 2 [Mac OS X] => 4 [Android] => 4 [Windows] => 1 )