我有下表这些列:
shortName, fullName, ChangelistCount
有没有办法用fullName中的字符串文字对它们进行分组? fullname表示文件目录,因此我想显示某些父文件夹而不是单个文件的结果。
我尝试了以下几点:
GROUP BY fullName like "%/testFolder/%" AND fullName like "%/testFolder2/%"
然而它只是在第一场比赛中真正分组....
谢谢!
答案 0 :(得分:3)
也许你想要这样的东西:
GROUP BY IF(fullName LIKE '%/testfolder/%', 1, IF(fullName LIKE '%/testfolder2/%', 2, 3))
要理解的关键点是,像fullName LIKE foo AND fullName LIKE bar
这样的表达式是整个表达式必须评估为TRUE
或FALSE
,因此您只能获得两个完整的组这一点。
使用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