Таким образом, у меня есть два столбца текста в базе данных 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";