数据库表:t_score
id     student     teacher    score
1      张三        王老师      80  
2      张三        韩老师      90
3      李四        王老师      70
4      王五        王老师      60 
5      王五        韩老师      60
我现在要在页面输出如下的内容:学生         打分教师          总分     平均分
张三      王老师,韩老师       170      85
李四      王老师               70       70
王五      王老师,韩老师       120      60请教各位前辈,这个应该怎么显示啊,用一条sql语句能实现吗?在线等,谢谢各位..           

解决方案 »

  1.   

    select student as 学生, group_concat(teacher) as 打分教师, sum(score) as 总分, avg(score) as 平均分 from t_score group by student
      

  2.   

    前辈啊,其实我那个student, teacher的字段都是int类型,存的是id,
    这样的话GROUP_CONCAT()就不好用了啊...?
      

  3.   


    select student as 学生, group_concat(teacher) as 打分教师, sum(score) as 总分, avg(score) as 平均分 from t_score group by student
      

  4.   

    int类型先转换为字符类型。group_concat(cast(teacher as char))
      

  5.   

    是还有两张表吗,一个学生一个老师,id和名字对应的?
    那可以用left join外联一下再group_concat名字
      

  6.   

    嗯 这其实是我举的个例子啊,其实应该是这样的
    数据库表 t_users
    id name
    1  张三
    2  李四
    3  王五
    数据库表t_kaohe
    infoid     kaoherenid   beikaoherenid  getscore
    1          1            2              50
    1          1            3              60
    1          2            3              70
    1          3            2              80
    最后实现这个样
    考核问卷id    考核人      被考核人        总分    平均分
    1            张三        李四,王五      110      55
    1            李四        王五             70      70
    1            王五        李四             80      80您再给看看啊,应该怎么办啊?谢谢 谢谢         
      

  7.   

    SELECT k.infoid AS 考核问卷id, u1.name AS 考核人, GROUP_CONCAT(u2.name) AS 被考核人, SUM(k.getscore) AS 总分, AVG(k.getscore) AS 平均分 FROM t_kaohe k LEFT JOIN t_users u1 ON u1.id = k.kaoherenid LEFT JOIN t_users u2 ON u2.id = k.beikaoherenid GROUP BY k.kaoherenid是这样吗 手写的没有验证
      

  8.   

    补充一下
    SELECT k.infoid AS 考核问卷id, u1.name AS 考核人, GROUP_CONCAT(u2.name) AS 被考核人, SUM(k.getscore) AS 总分, AVG(k.getscore) AS 平均分 FROM t_kaohe k LEFT JOIN t_users u1 ON u1.id = k.kaoherenid LEFT JOIN t_users u2 ON u2.id = k.beikaoherenid GROUP BY k.kaoherenid, k.infoid ORDER BY k.infoid ASC, 平均分 ASC
      

  9.   

    非常感谢您的帮助
    infoid kaoherenid beikaoherenid getscore
    1         2            3          70
    1         3            2          80
    按照你的方式,输出后,“王五”就成了null了,这是怎么了啊
    考核问卷id 考核人    被考核人     总分    平均分
    1          张三   李四,王五     110     55
    1          李四      null        70      70
    1          null      李四        80      80
      

  10.   

    是不是id不对,如果users表里木有这个用户。
      

  11.   

    是这样的
    1 李四 王五 70 70
    1 王五 李四 80 80
    如果我数据库里面只有这两条数据的时候,就会输出如下的..
    1 李四 null 70 70
    1 null 李四 80 80
      

  12.   

    显示行 0 - 2 (3 总计, 查询花费 0.0005 秒)
    SQL 查询: 
    SELECT k.infoid AS 考核问卷id, u1.name AS 考核人, GROUP_CONCAT( u2.name ) AS 被考核人, SUM( k.getscore ) AS 总分, AVG( k.getscore ) AS 平均分
    FROM t_kaohe k
    LEFT JOIN t_users u1 ON u1.id = k.kaoherenid
    LEFT JOIN t_users u2 ON u2.id = k.beikaoherenid
    GROUP BY k.kaoherenid, k.infoid
    ORDER BY k.infoid ASC , 平均分 ASC 
    LIMIT 0 , 30
     [编辑] [解释 SQL] [创建 PHP 代码] [刷新]   
       行,开始行数:   
    以   模式显示,并且在   个单元格后重复标题
       
     
    考核问卷id
    考核人
    被考核人
    总分
    平均分
    1 张三 李四,王五 110 55.0000
    1 李四 王五 70 70.0000
    1 王五 李四 80 80.0000
    我觉得应该是id跟人名对应有问题。我这里执行是正确的。
      

  13.   


    前辈啊,我现在需要再显示如下的
    考核问卷id  被考核人   被考核人    总分 平均分
    1           李四     张三,王五   130  65
    1           王五    张三,李四   130  65我改了改您的sql语句,可还是实现不了,您能再给看看吗?谢谢谢谢
      

  14.   

    前辈啊,我现在需要再显示如下的
    考核问卷id 被考核人       考核人     总分 平均分
    1          李四       张三,王五    130  65
    1          王五       张三,李四    130  65我改了改您的sql语句,可还是实现不了,您能再给看看吗?谢谢谢谢
      

  15.   

    SELECT k.infoid AS 考核问卷id, u1.name AS 被考核人, GROUP_CONCAT(u2.name) AS 考核人, SUM(k.getscore) AS 总分, AVG(k.getscore) AS 平均分 FROM t_kaohe k LEFT JOIN t_users u1 ON u1.id = k.beikaoherenid LEFT JOIN t_users u2 ON u2.id = k.kaoherenid GROUP BY k.kaoherenid, k.infoid ORDER BY k.infoid ASC, 平均分 ASC