sql >> Databasteknik >  >> RDS >> Mysql

MySql:Räkna hur många gånger orden förekommer i en kolumn

Här är en lösning som endast använder en fråga:

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

Här är den fullständiga fungerande fiolen:http://sqlfiddle.com/#!2/17481a/ 1

Först gör vi en fråga för att extrahera alla ord som förklaras här av @peterm(följ hans instruktioner om du vill anpassa det totala antalet bearbetade ord). Sedan konverterar vi det till en underfråga och sedan COUNT och GROUP BY värdet för varje ord och gör sedan en ny fråga utöver det för att GROUP BY inte grupperade ord fall där åtföljande tecken kan finnas. dvs:hej =hej! med en REPLACE



  1. Importera stor csv-fil till mysql-databas med php

  2. Deltar du i PASS Summit i Charlotte?

  3. Kan jag definiera flera händelser i en Trigger-deklaration i mysql?

  4. Biblioteket har inte laddats:libmysqlclient.16.dylib fel vid försök att köra 'rails server' på OS X 10.6 med mysql2 gem