最小(列)与空值?

Jer*_*emy 4 oracle

我是数据库新手,但我希望你能帮助我理解一些东西。

参加这个查询:

选择 min(date) 作为日期...

假设某些日期为空。它会产生什么影响?查询会中断吗?

Jus*_*ave 13

MIN将返回最小的非 NULL 值。查询不会抛出错误,它会简单地忽略 NULL 值

SQL> with x as (
  2    select null dt from dual union all
  3    select sysdate from dual
  4  )
  5  select min(dt)
  6    from x;

MIN(DT)
---------
21-OCT-11
Run Code Online (Sandbox Code Playgroud)


Jac*_*las 7

假设某些日期为空

为了完整起见,我还假设可能有零行

我正在使用这个测试数据:

create table t as
select to_date('20110101', 'YYYYMMDD')+level-1 as d from dual connect by level<=5
union all select null from dual;

select * from t;
D                         
------------------------- 
01-JAN-11 00.00.00        
02-JAN-11 00.00.00        
03-JAN-11 00.00.00        
04-JAN-11 00.00.00        
05-JAN-11 00.00.00        
(null)
Run Code Online (Sandbox Code Playgroud)

并考虑以下情况:

  1. 一些行但没有null值:

    select min(d) from t where d is not null;
    MIN(D)                    
    ------------------------- 
    01-JAN-11 00.00.00      
    
    Run Code Online (Sandbox Code Playgroud)
  2. 一些行以及两者null和非null值:

    select min(d) from t;
    MIN(D)                    
    ------------------------- 
    01-JAN-11 00.00.00      
    
    Run Code Online (Sandbox Code Playgroud)
  3. 一些行和所有值是null

    select min(d) from t where d is null;
    MIN(D)                    
    ------------------------- 
    (null)
    
    Run Code Online (Sandbox Code Playgroud)
  4. 没有行:

    select min(d) from t where 1=2;
    MIN(D)                    
    ------------------------- 
    (null)
    
    Run Code Online (Sandbox Code Playgroud)
  5. 一个有趣的边缘情况,group by它不返回任何行:

    select min(d) from t where 1=2 group by 1;
    MIN(D)                    
    ------------------------- 
    
    Run Code Online (Sandbox Code Playgroud)

旁白:我没有用作date别名,因为 Oracle 抱怨(并非不合理的 IMO)

select to_date('20110101', 'YYYYMMDD') as date from dual;
ORA-00923: FROM keyword not found where expected
Run Code Online (Sandbox Code Playgroud)