Ada*_*dam 5 mysql group-by mysql-error-1064
我有以下查询:
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
Run Code Online (Sandbox Code Playgroud)
这会产生:
mcq_id avg_score
1 5.75
2 9.22
6 8.81
7 8.94
14 7.00
16 9.46
Run Code Online (Sandbox Code Playgroud)
我想用它来更新另一个名为mcqusing的表mcq_id来匹配结果mcq.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;
Run Code Online (Sandbox Code Playgroud)
这给出了:
#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
Run Code Online (Sandbox Code Playgroud)
Yog*_*ngh 13
我认为您可以使用与表的连接并更新列,如下所示:
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;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6801 次 |
| 最近记录: |