Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 基于子查询的结果更新表中的多行_Mysql_Group By_Mysql Error 1064 - Fatal编程技术网

Mysql 基于子查询的结果更新表中的多行

Mysql 基于子查询的结果更新表中的多行,mysql,group-by,mysql-error-1064,Mysql,Group By,Mysql Error 1064,我有以下疑问: 选择 统计mcq_id, 四轮统计总分/统计数字,2为平均分 从…起 选择 用户_mcq.mcq_id, 总分作为总分, 将用户\u mcq.id计数为已采取的数量 来自用户_mcq user.id=user\u mcq.user\u id上的内部联接用户 其中user.level_id=3 用户_mcq.is _complete=1 按用户分组\u mcq.mcq\u id 作为统计 这将产生: mcq_id avg_score 1 5.75 2 9.

我有以下疑问:

选择 统计mcq_id, 四轮统计总分/统计数字,2为平均分 从…起 选择 用户_mcq.mcq_id, 总分作为总分, 将用户\u mcq.id计数为已采取的数量 来自用户_mcq user.id=user\u mcq.user\u id上的内部联接用户 其中user.level_id=3 用户_mcq.is _complete=1 按用户分组\u mcq.mcq\u id 作为统计 这将产生:

mcq_id  avg_score
1       5.75
2       9.22
6       8.81
7       8.94
14      7.00
16      9.46
我想用它来更新另一个名为mcq的表,使用结果中的mcq_id来匹配mcq.id

我尝试了以下方法,但没有成功:

更新mcq SET mcq.avg_分数=来自的统计数据.avg_分数 选择 统计mcq_id, 四轮统计总分/统计数字,2为平均分 从…起 选择 用户_mcq.mcq_id, 总分作为总分, 将用户\u mcq.id计数为已采取的数量 来自用户_mcq user.id=user\u mcq.user\u id上的内部联接用户 其中user.level_id=3 用户_mcq.is _complete=1 按用户分组\u mcq.mcq\u id 作为统计 作为统计数据 其中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

我认为您可以将连接与able表一起使用,并更新列,如下所示:

 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;

太好了,非常感谢美好的这真的节省了我的时间。。