两个表 一个是书表book(bookid,typeid) 还有类型表type(typeid,typename)
现在就是想得到每种类型有多少本书,就是得到(typename,个数)
我这样写的select typename,count(*) from book,type where book.type=type.typeid group by book.typeid,typename
但是实际得到的个数比实际朵很多,我估计是连接的问题,求解~~

解决方案 »

  1.   

    select typeid ,typename,count(*) 
      from book,type 
     where book.type=type.typeid group by typeid ,typename你group by bookid 干啥,难道要统计每本书的数量?
    你想按哪个字段group 就写哪个字段,其他的不要加,要会出现很神奇的效果
      

  2.   

    select b.*,temp.vcount
    from bd_vip_custtype b 
    left join 
            (select a.viptype_id,count(*) vcount from bd_vip_cust a 
                    group by a.viptype_id
            ) temp on b.viptype_id = temp.viptype_id
    这个是我的做法,看看你能不能看懂,
    解释一下,
    select from 类型表
    left join (
         select from 书表 --查询出类型id  和count
      

  3.   

    select b.viptype_id,count(b.vip_id) from bd_vip_custtype a
    left join bd_vip_cust b on b.viptype_id = a.viptype_id
    group by b.viptype_id
      

  4.   

    select (select typename from type where typeid=t.typeid) as 类型,count(*) as 数量 from book t group by t.typeid;
      

  5.   

    从两个方面来检查你的bug。
    其一,逻辑上,看看是否book表与type表的关系:一对多?多对多?
    其二,语法上,“book.type=type.typeid”,其中,这里面book.type是不是要写成book.typeid呢?最后,其实在统计分析方面,oracle和其他数据库系统有很大的不同,oracle有他自己的分析函数来专门处理统计分析的;比如,你的问题就可以用sum()over(partition by tpyename)来实现了。
    select distinct typename 类型,count(1)over(partition by typename)个数  from c order by tpyename;