MYSQL:使用GROUP BY和字符串文字

时间:2010-10-12 19:07:03

标签: string mysql query-string pattern-matching

我有下表这些列:

shortName, fullName, ChangelistCount

有没有办法用fullName中的字符串文字对它们进行分组? fullname表示文件目录,因此我想显示某些父文件夹而不是单个文件的结果。

我尝试了以下几点:

GROUP BY fullName like "%/testFolder/%" AND fullName like "%/testFolder2/%"

然而它只是在第一场比赛中真正分组....

谢谢!

3 个答案:

答案 0 :(得分:3)

也许你想要这样的东西:

GROUP BY IF(fullName LIKE '%/testfolder/%', 1, IF(fullName LIKE '%/testfolder2/%', 2, 3))

要理解的关键点是,像fullName LIKE foo AND fullName LIKE bar这样的表达式是整个表达式必须评估为TRUEFALSE,因此您只能获得两个完整的组这一点。

使用IF表达式返回其中一个几个不同的值,可以让您获得更多组。

请记住,这不会特别快。如果您有一个非常大的数据集,您应该探索其他存储数据的方法,这些方法不需要进行LIKE比较来进行分组。

答案 1 :(得分:2)

您必须使用子查询来派生您最终要分组的列值:

    FROM (SELECT SUBSTR(fullname, ?)AS derived_column
            FROM YOUR_TABLE ) x
GROUP BY x.derived_column

答案 2 :(得分:0)

使用when / then条件或使用另一个包含您要查找和分组的所有匹配项的临时表。我的数据库中的示例。

在这里,我想根据城市内的地址字段对所有用户进行分组。

SELECT ut.* , c.city, ua.*
FROM  `user_tracking` AS ut
LEFT JOIN cities AS c ON ut.place_name LIKE CONCAT(  "%", c.city,  "%" )
LEFT JOIN users_auth AS ua ON ua.id = ut.user_id