表caifujifen结构如下:id    to2   cons
1     2     30
2     2     20
3     3     30 
4     3     40表member结构如下user_id  username 
2         admin
3         vipstar其中 caifujifen.to2对应member.user_id想要实现分别列出 to2中 2、3用户的积分 (cons) 总合,以用户名的形式表现出来,结果现实如下
 admin   50
 vipstar 70请给出代码及思路,谢谢

解决方案 »

  1.   

    select m.username,sum(cons) as cons from caifujifen c
    left join member m on m.user_id=c.to2
    gorup by m.username
      

  2.   

    手写,未测试
    SELECT m.username, IFNULL(sum(c.cons), 0) AS cons
    FROM member AS m LEFT JOIN caifujifen AS c ON c.to2=m.user_id
    WHERE 1 GROUP BY m.username
      

  3.   

    SELECT B.USERNAME, SUM(A.CONS) AS CONS
    FROM caifujifen AS A JOIN member AS B ON A.id = B.user_id
    GROUP BY (A.id)
      

  4.   

    单词写错了
    SELECT m.username, sum( c.cons ) AS cons
    FROM caifujifen c
    LEFT JOIN member m ON m.user_id = c.to2
    GROUP BY c.to2
      

  5.   

    也正确,而且cons为0的也列出来了,
      

  6.   

    请问 amani11 where 1 的 意思 是?还有 GROUP BY m.username 改为 GROUP BY cons 或 GROUP BY c.cons 显示的总是不完整,原来共8个用户显示8 行,现在只显示 4行
      

  7.   

    刚查了一下资料,用GROUP BY 是取唯一值,那么CONS=0的就只显示其中一个了,那我想让结果以CONS排序应该如何办呢,自己也再试试。
      

  8.   

    GROUP BY 是分组你需要 用户的积分 (cons) 总合,以用户名的形式表现出来
    那么就要对 cons 求和,按 username 分组
      

  9.   

    那如果同时想以cons排序 可以做到吗。
      

  10.   

    SELECT m.username, IFNULL(sum(c.cons), 0) AS cons
    FROM member AS m LEFT JOIN caifujifen AS c ON c.to2=m.user_id
    WHERE 1 GROUP BY m.username
    ORDER BY cons ASC ####DESC 倒序  试试
    ####WHERE 1 就是全部了,可以省略,你也可以自己加上其他条件,比如member的注册时间等
      

  11.   

    谢谢 amani11 的指导,我想再问一下,为何where 1 就是全部了呢,从哪可以学到这些,MYSQL手册 ? 谢谢。
      

  12.   

    MySQL手册
    http://dev.mysql.com/doc/refman/5.1/zh/index.html
      

  13.   

    select m.username,sum(cons) as '总分' from caifujifen c,member m where c.to2 = m.user_id group by m.username
      

  14.   


    select m.username,sum(cons) as '总分' from caifujifen c,member m 
    where c.to2 = m.user_id group by m.username
      

  15.   


    谢谢。如果我想查询cons>30的,
    这样写
    SELECT m.username, IFNULL(sum(c.cons), 0) AS cons
    FROM member AS m LEFT JOIN caifujifen AS c ON c.to2=m.user_id
    WHERE cons>30 GROUP BY m.username
    ORDER BY cons ASC 执行的不对,请指教,,,
      

  16.   

    很简单,加个套套SELECT * FROM
    (SELECT m.username, IFNULL(sum(c.cons), 0) AS cons
    FROM member AS m LEFT JOIN caifujifen AS c ON c.to2=m.user_id
    WHERE 1 GROUP BY m.username
    ORDER BY cons ASC) AS t
    WHERE cons>30
      

  17.   

    谢谢 amani11 谢谢CSDN 经君一指导 胜读十年书!