本帖最后由 ACMAIN_CHM 于 2010-12-16 11:15:00 编辑

解决方案 »

  1.   

    在你上一个贴子中已经回复你了。mysql> SELECT a.id, a.userid, a.classid,count(b.paperid) as `试卷汇总`,b.paperid, sum(b.optionscore) as `总成绩`,
        -> (select if(MIN(editedscore)=0.00,0,1) from paper_exams_answer WHERE userid=a.userid) as `成绩是否被确认`
        -> FROM class_user a
        -> LEFT JOIN paper_exams_answer b ON a.userid = b.userid
        -> LEFT JOIN class_paper c ON b.paperid = c.paperid
        -> LEFT JOIN paper d ON b.paperid = d.id
        -> WHERE b.optionscore IS NOT NULL
        -> AND a.userid <>0
        -> AND a.isdel <>1
        -> and c.isdel <>1
        -> group by a.userid;
    +-----+--------+---------+----------+---------+--------+----------------+
    | id  | userid | classid | 试卷汇总 | paperid | 总成绩 | 成绩是否被确认 |
    +-----+--------+---------+----------+---------+--------+----------------+
    | 154 |      2 |       2 |        2 |       1 | 140.00 |              0 |
    | 153 |      3 |       2 |        1 |       1 |  85.00 |              1 |
    | 152 |      4 |       2 |        1 |       1 |  75.00 |              0 |
    +-----+--------+---------+----------+---------+--------+----------------+
    3 rows in set (0.00 sec)mysql>
      

  2.   

    SELECT a.id, a.userid, a.classid,COUNT(b.paperid) AS '试卷汇总',b.paperid, SUM(b.optionscore) AS '总成绩',
    tt AS '成绩是否被确认'     
    FROM class_user a
    LEFT JOIN paper_exams_answer b ON a.userid = b.userid
    LEFT JOIN class_paper c ON b.paperid = c.paperid
    LEFT JOIN paper d ON b.paperid = d.id
    LEFT JOIN 
    (SELECT a.userid,IF(editedscore=0.00,0,1) AS tt FROM paper_exams_answer a GROUP BY a.userid) e
    ON a.userid=e.userid
    WHERE b.optionscore IS NOT NULL 
    AND a.userid <>0
    AND a.isdel <>1
    AND c.isdel <>1 
    GROUP BY a.userid
      

  3.   


     版主  正解;
     
     个人解析,希望能帮助到楼主;假设数据表中的数据按照以下格式排列
    mysql>select * from paper_exams_answer order by editedscore desc+----+--------+---------+-------------+-------------+
    | id | userid | paperid | optionscore | editedscore |
    +----+--------+---------+-------------+-------------+
    |  4 |      2 |       2 |       80.00 |       90.00 |
    |  2 |      3 |       1 |       85.00 |       85.00 |
    |  1 |      2 |       1 |       60.00 |        0.00 |
    |  3 |      4 |       1 |       75.00 |        0.00 |
    +----+--------+---------+-------------+-------------+
    把这个结果集当作原表进行查询:mysql>select a.userid,if(a.editedscore=0,0,1) as '成绩是否被确认' from (select * from paper_exams_answer order by editedscore desc) a group by userid;+--------+----------------+
    | userid | 成绩是否被确认
    +--------+----------------+
    |      2 |              1 |
    |      3 |              1 |
    |      4 |              0 |
    +--------+----------------+  这样子结果就不对了咯 ,userid 为2 的用户 实际上是没被确认的,所以语句就得这样写,select a.userid,if(min(a.editedscore)=0,0,1) as '成绩是否被确认' from (select * from paper_exams_answer order by editedscore desc) a group by userid;+--------+----------------+
    | userid | 成绩是否被确认
    +--------+----------------+
    |      2 |              0 |
    |      3 |              1 |
    |      4 |              0 |
    +--------+----------------+sql解析:也就是说按照userid分组的话,根据我们的需求 就是参加考试的user 必须几次考试的成绩一起被确认通过 才显示 为 1,  所以在分组的数据中 我们就是取每个组中 editedscore这个字段的最小值去进行判断,保证结果的正确性。thanks!
      

  4.   

    听从ACMAIN_CHM您的建议我又发了一个帖子!