Hier ist eine Lösung, die nur eine Abfrage verwendet:
SELECT SUM(total_count) as total, value
FROM (
SELECT count(*) AS total_count, REPLACE(REPLACE(REPLACE(x.value,'?',''),'.',''),'!','') as value
FROM (
SELECT SUBSTRING_INDEX(SUBSTRING_INDEX(t.sentence, ' ', n.n), ' ', -1) value
FROM table_name t CROSS JOIN
(
SELECT a.N + b.N * 10 + 1 n
FROM
(SELECT 0 AS N UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) a
,(SELECT 0 AS N UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) b
ORDER BY n
) n
WHERE n.n <= 1 + (LENGTH(t.sentence) - LENGTH(REPLACE(t.sentence, ' ', '')))
ORDER BY value
) AS x
GROUP BY x.value
) AS y
GROUP BY value
Hier ist die vollständige funktionierende Geige:http://sqlfiddle.com/#!2/17481a/ 1
Zuerst führen wir eine Abfrage durch, um alle Wörter zu extrahieren, wie hier
erklärt von @peterm (folgen Sie seinen Anweisungen, wenn Sie die Gesamtzahl der verarbeiteten Wörter anpassen möchten). Dann wandeln wir das in eine Unterabfrage um und dann COUNT
und GROUP BY
den Wert jedes Wortes, und machen Sie dann eine weitere Abfrage darüber nach GROUP BY
nicht gruppierte Wörter Fälle, in denen begleitete Zeichen vorhanden sein könnten. dh:hallo =hallo! mit einem REPLACE