2017-10-09 69 views
0

當我運行在Oracle 11g中下面的查詢查詢以最少返回多行甲骨文

SELECT least(val) 
FROM 
(
    SELECT 1 AS val 
    FROM dual 
    UNION 
    SELECT 2 AS val 
    FROM dual 
    UNION 
    SELECT 3 AS val 
    FROM dual 
); 

我期待一個單行,但它返回多行。請幫我理解我的理解出錯的地方..

+2

你的意思是min(),最少不是聚合函數,它用於i.E.獲取某些列的最小值:至少(a,b,c) – Turo

+0

重複Turo和Tim的說法,用略有不同的詞語表示:如果您有一個包含3列和100行的表,請選擇「至少(col1,col2,col3 )'會返回100行,一列;在每一行中,將返回該行中三列中的最小值。類似地(但不那麼直觀) - 'least(val)'意思是,FOR EACH ROW返回單個值集合中的最小值,即來自該行的'val'。顯然,具有單個元素的集合中的「最少」是該元素。 「最少(1,3,5)」是1; 「至少(8)」是8!類似地,'least(val)'就是'val' - 從那行開始。 – mathguy

回答

2

Oracle的LEAST函數返回表達式列表中的最小值,例如, LEAST(1, 2, 3)將返回1。因此可以使用LEAST來找到跨越的集合的最小值,例如, LEAST(col1, col2, col3)。你所看到的是可以預料到的,即你正在取回每條記錄的最小值的三條記錄。相反,如果您希望最小超過合計,那麼您應該使用MIN,例如,

select min(val) 
from 
(
    select 1 as val from dual union all 
    select 2 from dual  union all 
    select 3 from dual 
);