sql >> Databasteknik >  >> RDS >> Mysql

Räkna ordförekomster i en tabellkolumn

@Elad Meidar, jag gillar din fråga och jag hittade en lösning:

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. Hibernate Query problem med Informix

  2. Ta bort från två tabeller i en fråga

  3. Hur man skapar en användare och beviljar behörigheter i Oracle

  4. mysql-databasens infogning ändrar alla ID:n till 4294967295