Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/.htaccess/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oracle:在可空值上分区的分析函数_Oracle - Fatal编程技术网

Oracle:在可空值上分区的分析函数

Oracle:在可空值上分区的分析函数,oracle,Oracle,我不想计算空值。因为NULL不应该等于NULL 查看此查询结果: 如果不想筛选出master为空的行,可以执行以下操作 选择master, 总和(主值为空时的情况) 然后0 其他1 结束)结束(主分区) 临时工 SQL> ed Wrote file afiedt.buf 1 WITH temp as ( 2 SELECT 'A' as master , 1 Col from dual 3 UNION SELECT 'A' , 3 from dual 4 UNIO

我不想计算空值。因为NULL不应该等于NULL

查看此查询结果:


如果不想筛选出
master
为空的行,可以执行以下操作

选择master, 总和(主值为空时的情况) 然后0 其他1 结束)结束(主分区) 临时工

SQL> ed
Wrote file afiedt.buf

  1  WITH temp as (
  2  SELECT 'A' as master , 1 Col from dual
  3  UNION SELECT 'A' , 3  from dual
  4  UNION SELECT 'B' , 1 from dual
  5  UNION SELECT 'B' , 2 from dual
  6  UNION SELECT 'C' , 1 from dual
  7  UNION SELECT NULL , 1 from dual
  8  UNION SELECT NULL , 2 from dual)
  9  SELECT master,
 10         SUM( CASE WHEN master IS NULL
 11                   THEN 0
 12                   ELSE 1
 13               END) OVER (PARTITION BY master)
 14*   FROM temp
SQL> /

M SUM(CASEWHENMASTERISNULLTHEN0ELSE1END)OVER(PARTITIONBYMASTER)
- -------------------------------------------------------------
A                                                             2
A                                                             2
B                                                             2
B                                                             2
C                                                             1
                                                              0
                                                              0
Null不等于Null。但从聚合的角度来看,null等同于null。并不是分析能做到这一点;这是聚合本身

  1  WITH temp as (
  2  SELECT 'A' as master , 1 Col from dual
  3  UNION SELECT 'A' , 3 from dual
  4  UNION SELECT 'B' , 1 from dual
  5  UNION SELECT 'B' , 2 from dual
  6  UNION SELECT 'C' , 1 from dual
  7  UNION SELECT NULL , 1 from dual
  8  UNION SELECT NULL , 2  from dual )
  9  SELECT
 10     master,
 11     count(Col)
 12  FROM
 13*   temp group by master
SQL> /

M COUNT(COL)
- ----------
           2
A          2
B          2
C          1

或者,过滤掉它们:

  1  WITH temp as (
  2  SELECT 'A' as master , 1 Col from dual
  3  UNION SELECT 'A' , 3  from dual
  4  UNION SELECT 'B' , 1 from dual
  5  UNION SELECT 'B' , 2 from dual
  6  UNION SELECT 'C' , 1 from dual
  7  UNION SELECT NULL , 1 from dual
  8  UNION SELECT NULL , 2 from dual)
  9  SELECT
 10     master,
 11     count(Col) over (partition by master)
 12  FROM
 13    temp
 14* WHERE master is not null
SQL> /

M COUNT(COL)OVER(PARTITIONBYMASTER)
- ---------------------------------
A                                 2
A                                 2
B                                 2
B                                 2
C                                 1

另外,如果
col
可以为空,并且您也不希望对这些行进行计数,那么
在(按主分区)上进行计数(如果主分区不为空,则col else null end)
注意:
else null
是可选的,如果没有条件匹配,则检测默认值,
case
返回null。如果您不关心
col
是否为null,则只需执行
count(master)over(按master分区)
。而不是Justin的“sum(case…)
  1  WITH temp as (
  2  SELECT 'A' as master , 1 Col from dual
  3  UNION SELECT 'A' , 3  from dual
  4  UNION SELECT 'B' , 1 from dual
  5  UNION SELECT 'B' , 2 from dual
  6  UNION SELECT 'C' , 1 from dual
  7  UNION SELECT NULL , 1 from dual
  8  UNION SELECT NULL , 2 from dual)
  9  SELECT
 10     master,
 11     count(Col) over (partition by master)
 12  FROM
 13    temp
 14* WHERE master is not null
SQL> /

M COUNT(COL)OVER(PARTITIONBYMASTER)
- ---------------------------------
A                                 2
A                                 2
B                                 2
B                                 2
C                                 1