就是一个替换字符串的问题 SQL> select substr('1234567',0,length('1234567')-4)||'0000' from dual;SUBSTR( ------- 1230000 如果列A始终为7位,也可 SQL> select substr('1234567',0,3)||'0000' from dual;SUBSTR( ------- 1230000
不好意思,可能是表达不清楚,解释一下 根据substr(A,1,3)||'0000'来规类。目的是想得到规类之后每个类根据...SUM(D)...group by a...来排序,在排了序的结果中我只要前某个占比的数据。 现在的情况是:如果substr(A,1,3)||'0000'只有一个类别,如1110000则能实现,主要是substr(A,1,3)||'0000'分为了多个类(几十个),并且每个类的数据很多(大概几千条),在一条语句中怎么实现。
select * from (select *,substr(a,Length(A) - 4,4)||'0000' name FROM table1) a where (a.d/(select sum(b.d) from (select *,substr(a,Length(A) - 4,4)||'0000' name FROM table1 ) b where b.name=a.name))>0.5
(a.d/(select sum(b.d) from (select *,substr(a,Length(A) - 4,4)||'0000' name FROM table1 ) b where b.name=a.name))>0.5 我要的结果是根据substr(a,Length(A) - 4,4)||'0000' 分组,按SUM(D)排序,显示substr(a,Length(A) - 4,4)||'0000'记录条数的占比的记录,意思是这样,substr(a,Length(A) - 4,4)||'0000'如果有80个,并且分组后,每个组里面的记录数几百到几千不等,我要的结果是, 80个组里面,相应所有记录数排序之后前N%记录明细(A,substr(a,Length(A) - 4,4)||'0000' ,B,C,SUM(D).
谢谢以上回答,本人再说明一下意投: 比如substr(a,Length(A) - 4,4)||'0000' 有三个组,记录数{select count(m.*),m.a1 form (select *,substr(a,Length(A) - 4,4)||'0000' a1 FROM table1)m group by m.a1 }分别为24,20,100. 我想要的结果是三个组根椐SUM(D)排序前50%的记录数,即:三个组最后所要记录明细条目数分别为:12,10,50,
你是要取每一个类别(即a的前三位)按D排行前50%的记录,这个在ORACLE805有一点难,
在8I以上可以试试: select al,a,b,c,d from (select substr(a,1,3)||'0000' al,a,b,c,d,rank() over(order by d desc partition by substr(a,1,3)||'0000') px from table1), (select substr(a,1,3)||'0000' ab,count(*) zlsl from table1 group by substr(a,1,3)||'0000') where al=ab and px/zlsl<=0.5
SQL> select substr('1234567',0,length('1234567')-4)||'0000' from dual;SUBSTR(
-------
1230000
如果列A始终为7位,也可
SQL> select substr('1234567',0,3)||'0000' from dual;SUBSTR(
-------
1230000
根据substr(A,1,3)||'0000'来规类。目的是想得到规类之后每个类根据...SUM(D)...group by a...来排序,在排了序的结果中我只要前某个占比的数据。
现在的情况是:如果substr(A,1,3)||'0000'只有一个类别,如1110000则能实现,主要是substr(A,1,3)||'0000'分为了多个类(几十个),并且每个类的数据很多(大概几千条),在一条语句中怎么实现。
我要的结果是根据substr(a,Length(A) - 4,4)||'0000' 分组,按SUM(D)排序,显示substr(a,Length(A) - 4,4)||'0000'记录条数的占比的记录,意思是这样,substr(a,Length(A) - 4,4)||'0000'如果有80个,并且分组后,每个组里面的记录数几百到几千不等,我要的结果是,
80个组里面,相应所有记录数排序之后前N%记录明细(A,substr(a,Length(A) - 4,4)||'0000' ,B,C,SUM(D).
比如substr(a,Length(A) - 4,4)||'0000' 有三个组,记录数{select count(m.*),m.a1 form (select *,substr(a,Length(A) - 4,4)||'0000' a1 FROM table1)m group by m.a1
}分别为24,20,100.
我想要的结果是三个组根椐SUM(D)排序前50%的记录数,即:三个组最后所要记录明细条目数分别为:12,10,50,
select al,a,b,c,d from
(select substr(a,1,3)||'0000' al,a,b,c,d,rank() over(order by d desc partition by
substr(a,1,3)||'0000') px from table1),
(select substr(a,1,3)||'0000' ab,count(*) zlsl from table1 group by substr(a,1,3)||'0000')
where al=ab and px/zlsl<=0.5