Intereting Posts
YII – как мы можем получить имя метода в функции init () в контроллере? отключить элемент массива посредством ссылки Как защитить веб-приложение, проданное на основе лицензии, от пиратства? Как получить электронную почту и вложения из PHP Как имитировать более одного запроса (то есть 4000 или более) на одной странице для проверки производительности? Почему файл Unicode PHP генерирует разрыв строки? вызов CURL с данными POST и заголовками в командной строке Организация тестов PHPUnit в пространствах имен Проверка Laravel, если запись существует Вставка двоичного кода в MySQL BLOB Как использовать jquery для автозаполнения с именами пользователей для приложения для сообщений? Не удается получить доступ к Facebook signed_request с вкладкой iframe NetBeans не удалось установить некоторые модули Запуск и остановка таймера PHP Как вызвать функцию из .so-файла, используя php-скрипт?

Как найти наиболее распространенные слова в базе данных MySQL и средний второй столбец

Таким образом, у меня есть два столбца текста в базе данных MySQL, примером может быть следующее:

Name Score Henry Hodgens 4 Mary Hodgens 8 Jim Servan 2 Jane Servan 4 Hank Servan 6 Sarah Smith 10 Mary Smith 12 Henry Dobbins 2 Henry Jenkins 4 

Мне нужно запустить запрос с PHP, который может отображать среднее значение «Score», основанное на наиболее распространенных вхождениях одного слова в «Name». Таким образом, это будет показывать, что «Servan» в среднем 4, «Henry» в среднем 3,3, «Hodgens» составляет в среднем 6, «Mary» в среднем 10, в порядке большинства случаев слова в «Name».

Я надеюсь в этом есть смысл.

Вы можете сделать это так:

 SELECT AVG(t.Score) AS ScorceAvg, t.name FROM ( SELECT SUBSTRING(Table1.Name,1,INSTR(Table1.Name, ' ')) AS name, Table1.Score FROM Table1 UNION ALL SELECT SUBSTRING(Table1.Name,INSTR(Table1.Name, ' ')) AS name, Score FROM Table1 ) AS t GROUP BY t.name 

Это очень сложно сделать в MySQL. Это здорово при хранении и извлечении реляционных значений, а не в таком большом количестве вычислений. Если вы не против делать это внутри PHP, вы можете использовать приведенный ниже код для подсчета частот.

 foreach ($rows as $row) { foreach (explode(" ", $row['Name']) as $token) { $total[$token] += (int)$row['Score']; $occurances[$token]++; } } // compute average by taking ($total[$token])/($occurances[$token]) где foreach ($rows as $row) { foreach (explode(" ", $row['Name']) as $token) { $total[$token] += (int)$row['Score']; $occurances[$token]++; } } // compute average by taking ($total[$token])/($occurances[$token]) 

Вот какая прекрасная вещь

 SELECT distinct SUBSTRING(NAME, LOCATE(' ',NAME)+1) as NameED, (select avg(score) from avgscore where NameED = SUBSTRING(NAME, LOCATE(' ',NAME)+1)) as Score FROM avgscore 

Попробуй это

 SELECT sum(Score)/count(Name) as average FROM tablename where Name regexp "Mary";