2017-10-09 71 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 
);