iT邦幫忙

0

SQL 先計算再取出最大值

select round((A.a/@USD),2)
可以正確顯示筆數,但需要抓最大值,所以把指令改成
select max(round((A.a/@USD),2))
會跑到time out
請問select max() 不能這樣使用嗎?
如何實現「從計算後的結果裡抓出最大值」的需求?

外獅佬 iT邦大師 1 級 ‧ 2012-12-20 17:04:23 檢舉
請愛用『子查詢』...
魯大 iT邦高手 1 級 ‧ 2012-12-20 23:25:06 檢舉
只是一個小小想法,提供做參考,是否可行要試了才會知道
想法如下:
如果使用排序,把計算後的值做由大到小的排序
然後在 select 的後面接上 TOP 1
只取第一筆,那應該就只會得到最大值了..

select TOP 1 (round((A.a/@USD),2))........ order by .... desc
8
simon0627
iT邦新手 2 級 ‧ 2012-12-21 15:07:19
最佳解答

你的巢狀 select 語法上是沒有問題的
但會timeout 是否筆數過多而造成table scan
不知你的select round((A.a/@USD),2)筆數共幾筆 因此法下的資料無法有index的支援,若再加上select max() 則資料一多 久是必然的
輸出至暫存資料表或CREATE VIEW都是不錯的方式

14
player
iT邦大師 1 級 ‧ 2012-12-20 17:06:48

你可以把計算結果先輸出暫存資料表
再從暫存資料表去算 max 值

或是巢狀Select
select max() 放到最外層

2
pantc328
iT邦研究生 1 級 ‧ 2012-12-24 10:57:58

select round(max(A.a)/@USD),2)
from tableName
group columnName

我要發表回答

立即登入回答