select id,sum(a),sum(b),sum(decode(sign(2 * a / b - 1),1,1,0))
from tabname group by id;

解决方案 »

  1.   

    14:26:50 jlanzpa817>create table tabname
    14:53:13   2  (
    14:53:13   3  id varchar2(10),
    14:53:13   4  a  number,
    14:53:13   5  b  number
    14:53:13   6  );表已创建。已用时间:  00: 00: 00.51
    14:53:13 jlanzpa817>
    14:53:13 jlanzpa817>insert into tabname values('1',34,567);已创建 1 行。已用时间:  00: 00: 00.30
    14:53:14 jlanzpa817>insert into tabname values('1',54,233);已创建 1 行。已用时间:  00: 00: 00.10
    14:53:14 jlanzpa817>
    14:53:14 jlanzpa817>insert into tabname values('2',12,18);已创建 1 行。已用时间:  00: 00: 00.10
    14:53:14 jlanzpa817>insert into tabname values('2',34,50);已创建 1 行。已用时间:  00: 00: 00.10
    14:53:14 jlanzpa817>insert into tabname values('2',45,120);已创建 1 行。已用时间:  00: 00: 00.11
    14:53:14 jlanzpa817>commit;提交完成。已用时间:  00: 00: 00.00
    14:53:14 jlanzpa817>
    14:53:14 jlanzpa817>select id,sum(a),sum(b),sum(decode(sign(2 * a / b - 1),1,1,0))
    14:53:21   2  from tabname group by id;ID             SUM(A)     SUM(B) SUM(DECODE(SIGN(2*A/B-1),1,1,0))
    ---------- ---------- ---------- --------------------------------
    1                  88        800                                0
    2                  91        188                                2已用时间:  00: 00: 00.60
    14:53:22 jlanzpa817>
      

  2.   

    create tabele xxx as select id,sum(a),sum(b),sum(decode(sign(2 * a / b - 1),1,1,0))
    from tabname group by id;select * from xxx
      

  3.   

    TO  jlandzpa(jlandzpa) :
    可是我的 条件0.5是个变量,是通过前台页面传递过来的值得到的。
    可以是任何数值:0.1、0.2、0.3、……、1、1.5……
    那我该如何调整sign(2 * a / b - 1)而且我现在还要多加一列,那就是,不光对总的要求和,还要对符合条件的也另外求和ID             SUM(A)     SUM(B) count          sum(a)1
    ---------- ---------- ---------- ---------------------------------
    1                  88        800      0          0                
    2                  91        188      2          68               
      

  4.   

    select id,sum(a),sum(b),sum(decode(sign(a / b - 变量),1,1,0)),
    sum(decode(sign(a / b - 变量),1,b,0))
    from tabname group by id;
      

  5.   

    我想问一下:
    sign(a / b - 变量)的语法含义是什么?
    为什么换成这样就可以了呢?34/567-0.5=-0.44
    12/18-0.5=0.16
    34/50-0.5=0.18sign(n) 是根据非负数来判别的吗?如果 n>0 sign(n)=1;如果n<0 sign(n)=-1;如果 n=0 sign(n)=0
    是这样的么?谢谢^_^