Mysql
 sql >> Base de données >  >> RDS >> Mysql

MySql :compte le nombre de fois que les mots apparaissent dans une colonne

Voici une solution utilisant uniquement une requête :

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

Voici le violon complet :http://sqlfiddle.com/#!2/17481a/ 1

Nous faisons d'abord une requête pour extraire tous les mots comme expliqué ici par @peterm (suivez ses instructions si vous souhaitez personnaliser le nombre total de mots traités). Ensuite, nous convertissons cela en une sous-requête, puis nous COUNT et GROUP BY la valeur de chaque mot, puis faites une autre requête en plus pour GROUP BY mots non groupés cas où des signes accompagnés pourraient être présents. c'est-à-dire :bonjour =bonjour ! avec un REPLACE