Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Zählen von Wortvorkommen in einer Tabellenspalte

@Elad Meidar, deine Frage gefällt mir und ich habe eine Lösung gefunden:

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 Begleitzeichen vorhanden sein könnten. dh:hallo =hallo! mit einem REPLACE