sql >> Database >  >> RDS >> Mysql

MySql:Tel het aantal keren dat de woorden in een kolom voorkomen

Hier is een oplossing die alleen een query gebruikt:

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 is de volledig werkende viool:http://sqlfiddle.com/#!2/17481a/ 1

Eerst doen we een zoekopdracht om alle woorden te extraheren zoals uitgelegd hier door @peterm (volg zijn instructies als u het totale aantal verwerkte woorden wilt aanpassen). Dan zetten we dat om in een subquery en dan COUNT en GROUP BY de waarde van elk woord, en voer daarbovenop nog een zoekopdracht uit naar GROUP BY niet gegroepeerde woorden gevallen waarin begeleidende tekens aanwezig kunnen zijn. dat wil zeggen:hallo =hallo! met een REPLACE



  1. MySQL gebruikt kolomnamen uit een andere tabel

  2. Hoe een query in postgresql stoppen / beëindigen?

  3. Verschillende manieren om het schema en de gegevens van SQL Server-tabellen te vergelijken

  4. In plaats van LIKE en ~, waarom werkt alleen VERGELIJKBAAR MET als regex-match met alternatieven wordt uitgevoerd?