Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Policz częstotliwość każdego słowa

Wydaje się, że to rozwiązanie wykonuje swoje zadanie (skradzione prawie dosłownie z tej strony ). Wymaga auxiliary tabeli, wypełnionej kolejnymi numerami od 1 do co najmniej oczekiwanej liczby odrębnych słów. Jest to bardzo ważne, aby sprawdzić, czy tabela pomocnicza jest wystarczająco duża, w przeciwnym razie wyniki będą nieprawidłowe (nie wykazując błędu).

SELECT
    SUBSTRING_INDEX(SUBSTRING_INDEX(maintable.comment, ' ', auxiliary.id), ' ', -1) AS word,
    COUNT(*) AS frequency
FROM maintable 
JOIN auxiliary ON
    LENGTH(comment)>0 AND SUBSTRING_INDEX(SUBSTRING_INDEX(comment, ' ', auxiliary.id), ' ', -1)
    <> SUBSTRING_INDEX(SUBSTRING_INDEX(comment, ' ', auxiliary.id-1), ' ', -1)
GROUP BY word
HAVING word <> ' '
ORDER BY frequency DESC;

SQL Fiddle

To podejście jest tak nieefektywne, jak to tylko możliwe, ponieważ nie może używać żadnego indeksu.

Jako alternatywę użyję tabeli statystyk, którą będę na bieżąco z wyzwalaczami. Być może zainicjuj tabelę statystyk powyższym.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL pobiera datę sprzed n dni jako znacznik czasu

  2. MySQL CURRENT_TIMESTAMP jako DEFAULT

  3. Podciąg MySQL między dwoma ciągami

  4. SQL ANY &ALL Operatory

  5. Zmieniasz to z MySQL na MySQLi?