【问题标题】:query with LEAST returning multiple rows in oracle在 oracle 中使用 LEAST 返回多行的查询
【发布时间】:2018-03-20 04:56:03
【问题描述】:

当我在 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
);

我期待单行,但它返回多行。请帮我看看我的理解到底哪里出了问题..

【问题讨论】:

  • 你的意思是 min(),至少不是聚合函数,它用于 i.E.获取某些列的最小值:least(a,b,c)
  • 重复Turo 和Tim 所说的,稍微不同的话:如果你有一个3 列100 行的表,select least(col1, col2, col3) 将返回100 行1 列;在每一行中,将返回该行中三列中最小的值。类似地(但不那么直观) - least(val) 表示,FOR EACH ROW 返回单个值集合中的最小值,即该行中的 val。显然,具有单个元素的集合中的“最少”就是那个元素。 least(1, 3, 5) 为 1; least(8) 是 8!同样,least(val) 只是 val - 从那一行。

标签: sql oracle oracle11g


【解决方案1】:

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
);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-12
    • 1970-01-01
    • 1970-01-01
    • 2020-12-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多