5

次のクエリがあります。

SELECT 
  stat.mcq_id, 
  ROUND( stat.total_score / stat.num_taken, 2 ) AS avg_score
    FROM (
      SELECT 
        user_mcq.mcq_id, 
        SUM( score ) AS total_score, 
        COUNT( user_mcq.id ) AS num_taken
      FROM user_mcq
      INNER JOIN user ON ( user.id = user_mcq.user_id ) 
      WHERE user.level_id =3
      AND user_mcq.is_complete =1
      GROUP BY user_mcq.mcq_id
    ) AS stat

これにより、次が生成されます。

mcq_id  avg_score
1       5.75
2       9.22
6       8.81
7       8.94
14      7.00
16      9.46

これを使用して、一致する結果からmcqusingという別のテーブルを更新したいと思いますmcq_idmcq.id

私は次のことを試しましたが、成功しませんでした:

UPDATE mcq SET mcq.avg_score = stats.avg_score FROM (
  SELECT 
  stat.mcq_id, 
  ROUND( stat.total_score / stat.num_taken, 2 ) AS avg_score
    FROM (
      SELECT 
        user_mcq.mcq_id, 
        SUM( score ) AS total_score, 
        COUNT( user_mcq.id ) AS num_taken
      FROM user_mcq
      INNER JOIN user ON ( user.id = user_mcq.user_id ) 
      WHERE user.level_id =3
      AND user_mcq.is_complete =1
      GROUP BY user_mcq.mcq_id
    ) AS stat
) AS stats
WHERE mcq.id = stats.mcq_id;

これは与える:

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'FROM ( SELECT stat.mcq_id, ROUND( stat.total_score / stat.num_taken, 2 ) A' at line 1
4

1 に答える 1

14

次のように、テーブルとの結合を使用して列を更新できると思います。

 UPDATE mcq, 
        (SELECT 
            stat.mcq_id, 
            ROUND( stat.total_score / stat.num_taken, 2 ) AS avg_score
             FROM (SELECT 
                  user_mcq.mcq_id, 
                  SUM(score ) AS total_score, 
                  COUNT( user_mcq.id ) AS num_taken
                  FROM user_mcq
                  INNER JOIN user ON ( user.id = user_mcq.user_id ) 
                  WHERE user.level_id =3
                  AND user_mcq.is_complete =1
                  GROUP BY user_mcq.mcq_id
             ) AS stat
       ) AS stats
SET mcq.avg_score = stats.avg_score 
WHERE mcq.mcq_id = stats.mcq_id;
于 2012-11-04T03:41:46.957 に答える