MYSQL表设计如下
rid 评分月份 评分人 被评分人 评分项 该项得分评分月份:多个月 1-12
评分项:多项1-4
得分:一项的得分1个月有多个评分人给被评分人打分 
被评分人有多个
一次打分有多个打分项 想得到的是:
被评分人 在 该月 的 总得分 的 平均数
注:
总得分 为评分人 该月 给同一被打分人 的所有评分项 的和
平均数 为所有评分人 的 打分和 的平均值问题在于:
都是多对多啊  我都没头绪了我想的思路是:
先得到同一个月的所有打分记录
然后筛选出来 同一个被打分人的所有记录
然后再筛选出来 同一个打分人的所有记录那么同一个打分人的给分之和 就是给这个人的总分
所有打分人的总分求个平均数 就是这个人的本月的得分
但是 这个SQL语句该怎么来啊,MYSQL!~~~~~~~~~求教!
对于我没说明白或不迷糊的  可继续提问。

解决方案 »

  1.   

    有点迷糊~~~
    这个表 rid 评分月份 评分人 被评分人 评分项 该项得分设计的就有问题吧!
      

  2.   

    DROP TABLE IF EXISTS `b0130-csdn-score`;
    CREATE TABLE `b0130-csdn-score` (
      `rid` int(11) NOT NULL AUTO_INCREMENT,
      `month` varchar(10) DEFAULT NULL COMMENT '月份',
      `scorer` int(11) DEFAULT NULL COMMENT '评分人',
      `by_scorer` int(11) DEFAULT NULL COMMENT '被评分人',
      `item` int(11) DEFAULT NULL COMMENT '评分项',
      `score` int(11) NOT NULL DEFAULT '0' COMMENT '成绩',
      PRIMARY KEY (`rid`)
    ) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=utf8;INSERT INTO `b0130-csdn-score`(`month`,scorer,by_scorer,item,score) VALUES(1,1,2,1,30);
    INSERT INTO `b0130-csdn-score`(`month`,scorer,by_scorer,item,score) VALUES(1,1,2,2,50);
    INSERT INTO `b0130-csdn-score`(`month`,scorer,by_scorer,item,score) VALUES(1,1,2,3,70);
    INSERT INTO `b0130-csdn-score`(`month`,scorer,by_scorer,item,score) VALUES(1,1,3,1,56);
    INSERT INTO `b0130-csdn-score`(`month`,scorer,by_scorer,item,score) VALUES(1,1,3,2,26);
    INSERT INTO `b0130-csdn-score`(`month`,scorer,by_scorer,item,score) VALUES(1,1,3,3,46);
    INSERT INTO `b0130-csdn-score`(`month`,scorer,by_scorer,item,score) VALUES(2,1,2,3,45);
    INSERT INTO `b0130-csdn-score`(`month`,scorer,by_scorer,item,score) VALUES(2,1,2,1,56);
    INSERT INTO `b0130-csdn-score`(`month`,scorer,by_scorer,item,score) VALUES(2,1,3,3,23);
    INSERT INTO `b0130-csdn-score`(`month`,scorer,by_scorer,item,score) VALUES(2,1,3,2,69);SELECT `month`,scorer,by_scorer,SUM(score),COUNT(*),sum(score)/COUNT(*)
    FROM `b0130-csdn-score` 
    GROUP BY `month`,scorer,by_scorer;
      

  3.   

    如果不需要评分人,就把scorer去掉即可
      

  4.   


    是这样  我迷糊了但是有个问题 就是 sum(score)/COUNT(*) 这个算的被打分人的各个打分项的平均分我想要的是所有人打分项和的平均分 应该是 先把每个人给被打分人的各项和算出来 即SUM(score)  也是你上面的记录
    SELECT `month`,scorer,by_scorer,SUM(score),COUNT(*)
    FROM `b0130-csdn-score` 
    GROUP BY `month`,scorer,by_scorer;然后对查询出来的记录按照 月份,被打分人再次分组
    再次求平均分sum(score)/COUNT(*) 这样才对但是怎么才能再次分组和求平均分呢  求教
      

  5.   

    select  count(*),sum(score) / count(*) ,`month`,by_scorer from ( SELECT `month`,scorer,by_scorer,SUM(score) as score
    FROM `b0130-csdn-score`  
    GROUP BY `month`,scorer,by_scorer) a GROUP BY `month`,by_scorer这样就行了