select distinct 
a,
b,
c,
(select sum(g) from mytable where pk=t.pk and mytime='2005') as d,--今年的销量,
(select sum(g) from mytable where pk=t.pk and mytime='2005') as e,--去年的销量,
(select sum(g) from mytable where pk=t.pk and mytime='2005')/
(select sum(g) from mytable where pk=t.pk and mytime='2005') as f--今年销量 比 去年销量
from mytable t不会每次用求和函数时都得用一个select吧,那么用d或e作运算的时候数据库是不是做了不少重复运算
能不能换个方法解决

解决方案 »

  1.   

    不好意思,写错了应该是去年
    select distinct 
    a,
    b,
    c,
    (select sum(g) from mytable where pk=t.pk and mytime='2005') as d,--今年的销量,
    (select sum(g) from mytable where pk=t.pk and mytime='2004') as e,--去年的销量,
    (select sum(g) from mytable where pk=t.pk and mytime='2005')/
    (select sum(g) from mytable where pk=t.pk and mytime='2004') as f--今年销量 比 去年销量
    from mytable t
      

  2.   

    select distinct 
    a,
    b,
    c,
    sum( case when  pk=t.pk and mytime='2005' then g else 0 end ) as d,--今年的销量,
    sum( case when  pk=t.pk and mytime='2004' then g else 0 end ) as e,--去年的销量,
    sum( case when  pk=t.pk and mytime='2005' then g else 0 end)/
    sum( case when  pk=t.pk and mytime='2004' then g else 0 end ) as f--今年销量 比 去年销量
    from mytable t
      

  3.   

    这样好吗?
    sum( case when  pk=t.pk and mytime='2005' then g else 0 end ) as d,--今年的销量,
    中pk=t.pk 不知道有没有问题,好像前面的pk并没有指定是哪个表的?
    sum( case when  pk=t.pk and mytime='2005' then g else 0 end)/
    sum( case when  pk=t.pk and mytime='2004' then g else 0 end ) as f--今年销量 比 去年销量
    中也重复计算了分子和分母吧?
      

  4.   

    我觉得类似的问题还是用pl/sql来解决的好。如果在严格的环境下考虑到性能的问题。
      

  5.   

    to 饥不择食 :是在PL/SQL中做的SQL,性能问题是不是在statistics选项中看啊?里边有好多好多行,到底哪个的大小能说明性能高低,还有那个output选项卡从来没发现里边有什么东西,不知道是干什么的?要想不重复计算分子和分母是不是只有嵌套查询了?