绕来绕去的查询语句,写不出来了,请大侠赐教!!A表id,name,tyle1   张三  一年级
2   李四  二年级B表
a.id , defen ,style1,style2
1       10       c       null
1       9        null     d
2       8        c        null
2       3        null     d
2       1        null     d我想提取姓名    年级     总分     几个c给的分    几个d给的分张三   一年级    19          1              1李四   二年级    12          1              2怎么写这个查询语句呀?

解决方案 »

  1.   


    SELECT a.*,count(style1) as style1, count(style1) as style1,sum(defen) as defen FROM `a` left join b on (a.id=b.aid) group by a.id
      

  2.   

    1.数据库中b的a.id改为sid2.select a.id,name,tyle,sum(defen),count(style1),count(style2) from a join b on a.id=b.sid group by a.id;
      

  3.   

    select a.name,a.style,count(b.defen),count(b.tyle1),count(b.style2) 
    from A a join B b on a.id=b.aid
    group by a.id;
      

  4.   


    select a.name,
              a.style,
              c.zongfen,
              c.c,
              c.d
    from  a 
    left join 
          (select b.id,
                     sum(b.defen) zongfen,
                     count(case b.style1 when 'c' then b.style1 end)  c,
                     count(case b.style2 when 'd' then b.style2 end) d 
           from b group by id) c 
    on a.id=c.id 
    功能实现了 不过没考虑效率..自己改改吧
      

  5.   

    表字段设计有问题,如果现在又有新需求需要统计得a和b的次数,你会怎么做?
    加两个字段表示a和b么?
    其实只需要设计一个字段就行了,值为c或者d