MySQL中的字符串出现排名

时间:2014-12-19 08:51:42

标签: mysql sql

我有一张表my_table包含像

这样的自由文本
my_table (each line contain one row)
-----
abc def
def jsj
kfi def ldkf
kgdu abc

我希望得到像

这样的结果
count string
3     def
2     abc
1     ...

有可能吗?什么是sql?

1 个答案:

答案 0 :(得分: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会多次获取最后一个字符串)。