2014-12-19 2 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 в противном случае получал бы последнюю строку несколько раз).

Смежные вопросы