2010-10-12 42 views
1

我與這些列如下表:MYSQL:使用GROUP BY與字符串文字

shortName, fullName, ChangelistCount 

有沒有辦法將它們分組由一個字符串其全名中的文字?全名代表文件目錄,所以我想顯示某些父文件夾的結果,而不是單個文件。

我試過的東西沿着線:

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

然而,只有真正通過組第一場比賽....

謝謝!

回答

3

也許你想要的東西,如:

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

的關鍵想法理解是像fullName LIKE foo AND fullName LIKE bar這樣的表達式是整個表達式必然會計算爲TRUEFALSE,所以你只能得到兩個總計組。

使用IF表達式返回之間的幾個不同的值將讓你獲得更多的組。

請記住,這不會特別快。如果您有一個非常大的數據集,則應該探索其他存儲數據的方法,這些數據不需要LIKE比較來進行分組。

+0

嗯......我必須做出多個IF,因此似乎可能反思這個問題可能是最好的解決方案。你知道分組依據日期的好方法嗎(也許按月分)? – Setheron 2010-10-12 20:52:11

+0

是的,您將不得不像我在示例中演示的那樣嵌套'IF'語句。 MySQL有許多內置的日期函數,包括MONTH()。 – VoteyDisciple 2010-10-12 20:55:12

+0

決定離開嵌套的IF。謝謝您的幫助。 – Setheron 2010-10-12 23:16:22

2

你不得不使用子查詢導出列的值,你想最終小組:

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

當/然後條件或使用另一個臨時表包含所有匹配你想找到和分組。從我的數據庫中抽樣。

在這裏,我想根據他們的城市在地址字段中的所有用戶。

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