sql - 如何在Oracle中找到负最大值和正最小值?

标签 sql oracle oracle11g max min

我有一列 number .它有正值和负值。我需要获得 4 个值:正最大值、正最小值、负最大值、负最小值:

a) 要获得正最大值:我可以使用 Check out the Fiddle

select max(cola) from test;

b) 要获得负最小值:我可以使用 Check out the Fiddle
select min(cola) from test;

我在这里有两个问题:

1)现在我不确定如何获得其他两个值。指导我得到那个

2)与此同时,在尝试这个的同时,我又有了另一个疑问。当我有一些类型为 varchar2 的列时它有数字作为值(value)。我正在本专栏中执行上述操作。正最大值与上述相同。但是负最小值很奇怪。 Check Fiddle Here .为什么这里没有适当的隐式转换发生。有人请解释这背后的原因吗?

最佳答案

对于问题 1,您可以轻松地使用 case 来确定您对哪些值进行了最小值/最大值。例如。:

select max(case when cola >= 0 then cola end) max_positive,
       min(case when cola >= 0 then cola end) min_positive,
       max(case when cola < 0 then cola end) max_negative,
       min(case when cola < 0 then cola end) min_negative
from   test;

对于问题 2,当您对 varchar 进行最小/最大操作时,您将进行字符串比较,而不是数字比较。您必须将值显式转换为数字,因为 Oracle 不知道您希望进行隐式转换。无论如何,您不应该真正依赖隐式转换。例如。:
select max(case when to_number(cola) >= 0 then to_number(cola) end) max_positive,
       min(case when to_number(cola) >= 0 then to_number(cola) end) min_positive,
       max(case when to_number(cola) < 0 then to_number(cola) end) max_negative,
       min(case when to_number(cola) < 0 then to_number(cola) end) min_negative
from   test1;

Here's the SQLFiddle for both cases.

注意我已经明确地分离出负值和正值(我将 0 与正数粘在一起;您必须决定如何处理值为 0 的行!),以防万一没有负数或没有正数。

关于sql - 如何在Oracle中找到负最大值和正最小值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31830685/

相关文章:

sql - 查询表的外键关系

sql - Oracle PIVOT,两次?

sql - 如何分配变量以插入到 SQL Server 中的表中?

sql - 共同的 friend -SQL算法

sql - 如何将对角线行转换为单行?

sql - Oracle 子查询前 1 个结果

SQL查询一对多关系

sql - 使用单个 .sql 脚本文件创建多个表

sql - 从另一个sql文件执行sql文件

java - ORA-01005 空密码 : What does Oracle consider to be null?