2014-12-19 46 views
0

排名我有一个表my_table包含像字符串出现在MySQL

my_table (each line contain one row) 
----- 
abc def 
def jsj 
kfi def ldkf 
kgdu abc 

我想有一个像

count string 
3  def 
2  abc 
1  ... 

是否有可能导致自由文本?什么是SQL?

回答

0

如果总是用空格分隔,那么您可以使用一系列生成的数字根据空格拆分字符串。

像这样

SELECT aString, COUNT(*) 
FROM 
(
    SELECT SUBSTRING_INDEX(SUBSTRING_INDEX((some_column, ' ', units.iCnt + 10 * tens.iCnt + 100 * hundreds.iCnt), ' ', -1) AS aString 
    FROM some_table, 
    (SELECT 1 aCnt UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9 UNION SELECT 0) units, 
    (SELECT 1 aCnt UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9 UNION SELECT 0) tens, 
    (SELECT 1 aCnt UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9 UNION SELECT 0) hundreds 
    WHERE LENGTH(some_column) - LENGTH(REPLACE(some_column, ' ', '')) >= (units.iCnt + 10 * tens.iCnt + 100 * hundreds.iCnt) 
) sub0 

这使用3个交叉连接选择其中每个生成的数字0到9,这可赋予范围为0至999(可以很容易地添加更多的交叉连接,如果有999个以上字符串在列中)。这个数字与SUBSTRING_INDEX一起使用以获得字符串到X空间,然后SUBSTRING_INDEX与-1一起使用以从前一空间获取字符串。

WHERE子句仅用于派生每个字符串(SUBSTRING_INDEX否则会多次获取最后一个字符串)。

相关问题