如何找到最常用的词在MySQL数据库和平均第二列

问题描述:

所以,我有两个文本列在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可以显示“分数”的平均值,基于“名称”中单个词最常见的情况。因此,它将显示“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]) 

试试这个

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

这里是个完美的东西

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