表1
信息Id  信息内容  作者
1       呵呵呵    小小
2       一起来玩  小鑫
3       你好吗?   可可表2信息Id   方式(1顶,0踩)
1         1
1         1
1         1
1         0
1         0
3         0
实现结果:信息Id   信息内容  顶   踩
1          呵呵呵   3    2 
2       一起来玩    0    0
3       你好吗?    0    1

解决方案 »

  1.   


    select a.信息id,a.信息内容,
      sum(decode(b.方式,1,1,0)顶,
      sum(decode(b.方式,0,1,0)踩
    from a,b
    where a.信息id=b.信息id(+)
    group by a.信息id,a.信息内容
      

  2.   


    select b.id,b.信息内容,a.c,,a.d 
    (
    select id,count(decode(方式,1,1,0)) c,count(decode(方式,0,1,0)) d from 表2
    group by id)A,表1 b  where a.id=b.id
      

  3.   


    这样查询可以,但是我还想要的是安顶倒序的,可是里面有null值
    信息Id  信息内容  顶     踩 
    1         呵呵呵  3    2 
    2        一起来玩        
    3         你好吗?      1
    这样直接排序有问题,如果用case then(或者ORDER BY 顶 DESC NULLS LAST)
     则可以
    还有其他的办法吗?
    哪个效率好一点~~
      

  4.   

    我写的代码应该不会出现null值的
    或者用count代替sum
    如果以0代替null,order by desc就行,如果有null,加个nulls last。只是显示问题,和效率没什么关系
      

  5.   

    有null值啊,如果改成 count ,就够就不对了,需要修改成:
    select a.信息id,a.信息内容, 
      count(decode(b.方式,1,1))顶, 
      count(decode(b.方式,0,1))踩 
    from a,b 
    where a.信息id=b.信息id(+) 
    group by a.信息id,a.信息内容但是空值会存在~~~~
      

  6.   

    不可能的,count()结果是>=0的整数,不会出现空值..
      

  7.   

    select t.id,count(decode(方式,1,1)) 顶,count(decode(方式,0,1)) 踩 from 表1 t,表2 t2 where t.id=t2.id(+) group by t.id
      

  8.   

    如果要排序,可以加order by t.id