Mysql 对查询w的更正

Mysql 对查询w的更正,mysql,sql-server,Mysql,Sql Server,执行查询时: SELECT DISTINCT (u.name),u.class, (SELECT ( markscored) FROM marklist WHERE subject LIKE 'biology' AND u.id=m.id) AS biology, (SELECT ( markscored) FROM marklist WHERE subject LIKE 'chemistry' AND u.id=m.id) AS chemistry, (SELECT ( markscored)

执行查询时:

SELECT DISTINCT (u.name),u.class,
(SELECT ( markscored) FROM marklist WHERE subject LIKE 'biology' AND u.id=m.id) AS biology,
(SELECT ( markscored) FROM marklist WHERE subject LIKE 'chemistry' AND u.id=m.id) AS chemistry,
(SELECT ( markscored) FROM marklist WHERE subject LIKE ' physics' AND u.id=m.id) AS physics,
(SELECT SUM( markscored) FROM marklist WHERE u.id=m.id) AS TOTAL,
(SELECT SUM(outof) FROM marklist WHERE u.id=m.id) AS OUTOF,


((SELECT SUM( markscored) FROM marklist WHERE u.id=m.id)/(SELECT SUM(outof) FROM marklist WHERE u.id=m.id)*100) as percentage
FROM  u, marklist m
WHERE u.id=m.userid 
我得到一个错误,如下所示:

错误1242(21000):子查询返回超过1行


我怎样才能解决这个问题呢?

以下内容可能对您有所帮助。 除数不能为0,因此如果将其更改为NULL,请使用NULL

    SELECT  u.name,u.class,
       SUM( markscored) AS TOTAL,
       SUM(outof) AS OUTOF
       SUM(CASE WHEN subject LIKE 'biology' THEN markscored ELSE 0 END) AS biology,
       SUM(CASE WHEN subject LIKE 'chemistry' THEN markscored ELSE 0 END) AS chemistry,
       SUM(CASE WHEN subject LIKE 'physics' THEN markscored ELSE 0 END) AS physics,
       SUM( markscored)/NULLIF(SUM(outof),0) as percentage

    FROM  u, marklist m
    WHERE u.id=m.userid
    GROUP BY u.name,u.class

子查询返回多个行,并且该子查询需要返回单个标量值才能使其有意义。请稍等片刻,将您的问题格式化,正如你期望SO社区花时间回答它一样。请更正我的查询,以获得准确的输出:+------------------+--------+--------+--------+--------+--------+--------+--------+--------+----名称|类|生物|化学|物理|总数|超出|百分比|+--------+---------+--------+---------+---------+---------+----+---------+---------+----+----阿伦| 5 | 45 | 42 |40 | 150 | 127 | 84.6 |请包括样本数据和预期输出。在没有解释的情况下,直接在so上转储一个查询是不太好的。您需要什么解释请回答…………注意,DISTINCT不是一个函数选择u.name、u.class、SUM(当主题为“生物学”时为CASE,然后markscored ELSE 0 END)作为生物学,SUM(当主题为“化学”时为CASE,然后markscored ELSE 0 END)作为化学,SUM(当科目如“物理”时,则markscored ELSE 0结束)作为物理,总和(markscored)作为总计,总和(outof)作为outof FROM u,marklist m,其中u.id=m.userid按u.name分组,u.class;