如何找到最常用的词在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