如何在 MySQL 中使用子字符串分组

Kei*_*son 5 mysql group-by

我有一张桌子叫filestatistics

id    file    userid    datetime
 1    p1          99    2017-04-15 09:05:10
 2    exp1        99    2017-04-15 09:25:17
 3    p2          99    2017-04-15 09:45:46
 4    exp2        99    2017-04-15 09:55:07
Run Code Online (Sandbox Code Playgroud)

我想根据他们的文件名对每个用户进行分组并获取他们的总条目,但不包括“ex”字符串。

我的查询是:

SELECT file FROM filestatistics WHERE userid = 99 GROUP BY file;
Run Code Online (Sandbox Code Playgroud)

我上面的查询导致 4 个条目是错误的。

对每个用户的文件进行分组的正确查询是什么?

期望的输出是

2 files for userid = 99 
//since p1 and exp1 are grouped as 1
//since p2 and exp2 are grouped as 1
Run Code Online (Sandbox Code Playgroud)

Seb*_*sch 8

您可以使用以下解决方案REPLACE来获取文件:

SELECT userid, REPLACE(file, 'ex', '') AS file, COUNT(id) AS cnt_files
FROM filestatistics 
GROUP BY REPLACE(file, 'ex', ''), userid
Run Code Online (Sandbox Code Playgroud)

要获取COUNT每个用户的文件,您可以使用以下命令:

SELECT COUNT(DISTINCT REPLACE(file, 'ex', '')) AS cnt_files
FROM filestatistics 
GROUP BY userid
Run Code Online (Sandbox Code Playgroud)

dbfiddle.uk 上的演示