有一張表
aa bb cc
1 a 1
2 b 0
3 a 1
4 c 1
希望結果集是
1 a 2
2 b 0
3 c 1
bb欄位去掉重復的值 并且把cc欄位的值相加
請問如何實作
必須用 子查詢 group by 嗎?
uj5u.com熱心網友回復:
可以用group byuj5u.com熱心網友回復:
大概就是這個意思SELECT aa,bb,sum(cc) FROM t_name t WHERE t.aa = (SELECT t1.aa FROM t_name GROUP BY t1.bb)
但是group by 不能這樣使用。
如何解決?
uj5u.com熱心網友回復:
select distinct t1.aa,t1.bb,t1.cc+t2.cc from tb t1,tb t2 where t1.bb=t2.bbunion
select distinct t1.aa,t1.bb,t1.cc from tb t1,tb t2 where t1.bb(+)=t2.bb and t2.bb=NULL
tb是你的表名
uj5u.com熱心網友回復:
SQL> with a as(2 select 1 c1,'a' c2,1 c3 from dual
3 union
4 select 2,'b',0 from dual
5 union
6 select 3,'a',1 from dual
7 union
8 select 4,'c',1 from dual)
9 select rownum rn,b.c2,s_c3 from (select a.c2,sum(a.c3) s_c3 from a group by a.c2) b;
RN C S_C3
---------- - ----------
1 a 2
2 b 0
3 c 1
uj5u.com熱心網友回復:
不知道你對前面的序號有什么要求?uj5u.com熱心網友回復:
有要求需要顯示出來看了一下思路 是通過group by到一張臨時表 在從零時表里面取出來
uj5u.com熱心網友回復:
那你的結果和提供的資料中的前面的序號也不對應喔
uj5u.com熱心網友回復:
需說明1 a 2
2 b 0
3 c 1
這個結果中的1/2/3 是怎么來的,自然序號還是有其他規則。
uj5u.com熱心網友回復:
小白前來學習感覺只要按照bb列group by就可以了啊 cc列是對對應bb列的求和吧 aa列其實是自然順序排列吧
select t.rownum,t.*
from(
select bb,sum(cc)
from t_name
group by bb) t ;
uj5u.com熱心網友回復:
t.rownum的t.不需要
4
5
select rownum,t.*
from(
select bb,sum(cc)
from t_name
group by bb) t ;
如果需求沒有理解錯的話 應該是這樣
uj5u.com熱心網友回復:
select aa,bb,cc from 表名 order by bb;uj5u.com熱心網友回復:
select rownum,t.*from(
select bb,sum(cc)
from t_name
group by bb) t ;
uj5u.com熱心網友回復:
select rownum,t.*from(
select bb,sum(cc)
from t_name
group by bb) t ;
這樣驗證了,這樣行
uj5u.com熱心網友回復:
這樣應該可以吧
WITH T AS(
SELECT '1' AA ,'a' BB ,'1' CC FROM DUAL
UNION ALL
SELECT '2' AA ,'b' BB ,'0' CC FROM DUAL
UNION ALL
SELECT '3' AA ,'a' BB ,'1' CC FROM DUAL
UNION ALL
SELECT '4' AA ,'c' BB ,'1' CC FROM DUAL
)SELECT * FROM (SELECT AA, BB,SUM(CC) OVER(PARTITION BY BB ) CC FROM T) TT
WHERE TT.AA = (SELECT MIN(AA) FROM T WHERE TT.BB = T.BB)
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/89149.html
標籤:基礎和管理
上一篇:Truncate Table 與 Drop Table 有辦法提高速度嗎?
下一篇:Oracle多表關聯洗掉
