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

MySql:Zählen Sie, wie oft die Wörter in einer Spalte vorkommen

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