Hier is een oplossing die alleen een query gebruikt:
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 is de volledig werkende viool:http://sqlfiddle.com/#!2/17481a/ 1
Eerst doen we een zoekopdracht om alle woorden te extraheren zoals uitgelegd hier
door @peterm (volg zijn instructies als u het totale aantal verwerkte woorden wilt aanpassen). Dan zetten we dat om in een subquery en dan COUNT
en GROUP BY
de waarde van elk woord, en voer daarbovenop nog een zoekopdracht uit naar GROUP BY
niet gegroepeerde woorden gevallen waarin begeleidende tekens aanwezig kunnen zijn. dat wil zeggen:hallo =hallo! met een REPLACE