Mysql
 sql >> база данни >  >> RDS >> Mysql

Пребройте честотата на всяка дума

Това решение изглежда върши работата (откраднато почти дословно от тази страница ). Изисква auxiliary таблица, изпълнена с последователни номера от 1 до поне очаквания брой отделни думи. Това е доста важно, за да се провери дали спомагателната таблица е достатъчно голяма, или резултатите ще бъдат грешни (без грешка).

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

Този подход е толкова неефективен, колкото може да бъде, защото не може да използва никакъв индекс.

Като алтернатива бих използвал таблица със статистически данни, която ще поддържам в крак с тригерите. Може би инициализирайте таблицата със статистически данни с горното.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. tomcat 7.0.42 обединяване, hibernate 4.2, mysql rock solid autoreconnect решение

  2. Как да оптимизирам търсенето по дата и час в Mysql?

  3. Как да конвертирате курсора на SQL Server в еквивалент на MySQL

  4. Как да дублирам таблица с ключове и други структурни функции, запазени в MySQL?

  5. Какъв е препоръчителният начин за свързване с MySQL от Go?