4

したがって、MySQLデータベースに2列のテキストがあり、例は次のようになります。

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であることがわかります。

これが理にかなっていることを願っています。

4

4 に答える 4

3

これを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])
于 2012-04-25T07:09:26.367 に答える
1

あなたはこのようにそれを行うことができます:

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
于 2012-04-25T07:30:58.837 に答える
1

これが完璧なことです

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
于 2012-04-25T09:02:14.313 に答える
0

これを試して

SELECT sum(Score)/count(Name) as average FROM tablename where Name regexp "Mary";
于 2012-04-25T07:17:54.477 に答える