線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1177
推到 Plurk!
推到 Facebook!

SQL可以寫出這樣的結果嗎

尚未結案
wchsieh
一般會員


發表:9
回覆:12
積分:4
註冊:2005-02-21

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-07-06 19:23:44 IP:203.66.xxx.xxx 未訂閱
請問,SQL查詢出來A欄位,ORACLE 有FUNCTION可以直接算出 B欄位=A/A加總 嗎?? A B 10 0.13 (10/(10 20 50)) 20 0.25 50 0.63
timhuang
尊榮會員


發表:78
回覆:1815
積分:1608
註冊:2002-07-15

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-07-06 23:50:05 IP:220.132.xxx.xxx 未訂閱
Hi, 可以利用一個 subquery 來做, 如 select A, A / (select sum(A) from table1) as B from table1
wchsieh
一般會員


發表:9
回覆:12
積分:4
註冊:2005-02-21

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-07-07 10:34:45 IP:203.66.xxx.xxx 未訂閱
我目前也是用這個方式..... 因為用subquery (select sum(A) from table1) 若此subquery很長...performance不是很好 就變成整個sql就很長...同樣的sql 2段加在一起 我是想說有沒有其他比較好的方式ㄋㄟ
JustinShen
中階會員


發表:22
回覆:104
積分:80
註冊:2003-09-20

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-07-07 12:42:07 IP:61.155.xxx.xxx 未訂閱
引言: 我目前也是用這個方式..... 因為用subquery (select sum(A) from table1) 若此subquery很長...performance不是很好 就變成整個sql就很長...同樣的sql 2段加在一起 我是想說有沒有其他比較好的方式ㄋㄟ
吾窃以为这样的情况用SubQuery performance不可能好,因为会执行n 1次Query来获取资料,原来可只要用1次就可以了。对于这种类型的问题一般用两种办法提高performance, 方法一:如果这个Query没有太多变体行为,就写一个storeprocedure,先获取Sum(A)放入临时变体,再组合进所需的Query中,这个方法执行2次Query,performance自然就好了; 方法二:只执行Query,在客户端进行计算(使用ClientDataSet比较方便)。 Justin Shen
------
====================
我为一切作努力!
Justin Shen

timhuang
尊榮會員


發表:78
回覆:1815
積分:1608
註冊:2002-07-15

發送簡訊給我
#5 引用回覆 回覆 發表時間:2005-07-07 18:18:23 IP:203.95.xxx.xxx 未訂閱
我同意 JustinShen 兄的建議, 基本上若是有 subquery 本來就有效能的問題, 利用一個暫存的變數來放, 再下 query 會比較理想. 當然放到 client 端來算效能也是應該不佳. 要如何用, 就看你的方法囉.
Nico_L
一般會員


發表:0
回覆:4
積分:0
註冊:2005-06-01

發送簡訊給我
#6 引用回覆 回覆 發表時間:2005-07-16 00:11:01 IP:211.76.xxx.xxx 未訂閱
SELECT List.A A,List.A/sum.A B FROM (select t.A A from table t where ?)List, (select sum(t.A) A table t where ?)sum
Nico_L
一般會員


發表:0
回覆:4
積分:0
註冊:2005-06-01

發送簡訊給我
#7 引用回覆 回覆 發表時間:2005-07-16 00:28:51 IP:211.76.xxx.xxx 未訂閱
SELECT t.A A,A/(sum(t.A) over ()) B FROM table t WHERE ? Using internal function of Oracle ,even so, there would be execution count n*2. To consider with performance, it still was a bad performance sql statement!!!
JustinShen
中階會員


發表:22
回覆:104
積分:80
註冊:2003-09-20

發送簡訊給我
#8 引用回覆 回覆 發表時間:2005-07-16 00:33:40 IP:222.93.xxx.xxx 未訂閱
引言: SELECT List.A A,List.A/sum.A B FROM (select t.A A from table t where ?)List, (select sum(t.A) A table t where ?)sum
这个方法似乎可以,但在SQL Server 2000 Northwind上运行结果不正确 SELECT List.Quantity Quantity,List.Quantity/sumit.Quantity B FROM (select [order details].Quantity Quantity from [order details]) List, (select sum([order details].Quantity) Quantity from [order details]) sumit; Justin Shen ================================= 如果能帮到您,我会很开心;如果能得到您的帮助,是我的荣幸 ================================= 發表人 - JustinShen 於 2005/07/16 00:35:40
------
====================
我为一切作努力!
Justin Shen

JustinShen
中階會員


發表:22
回覆:104
積分:80
註冊:2003-09-20

發送簡訊給我
#9 引用回覆 回覆 發表時間:2005-07-16 00:49:14 IP:222.93.xxx.xxx 未訂閱
引言: SELECT t.A A,A/(sum(t.A) over ()) B FROM table t WHERE ? Using internal function of Oracle ,even so, there would be execution count n*2. To consider with performance, it still was a bad performance sql statement!!!
不错,尤其使用[,]查询次数是迪卡尔积,所以我不建议使用 Justin Shen ================================= 如果能帮到您,我会很开心;如果能得到您的帮助,是我的荣幸 =================================
------
====================
我为一切作努力!
Justin Shen

系統時間:2024-06-27 22:25:48
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!