Oracle: аналитическая функция разделена на обнуляемые значения - PullRequest
3 голосов
/ 07 марта 2012

Я не хочу считать значения NULL. Потому что NULL не должен быть равен NULL.

Посмотрите на результат запроса: ссылка

WITH temp as (
SELECT 'A' as master , 1 Col from dual
UNION SELECT 'A' , 3  from dual
UNION SELECT 'B' , 1 from dual
UNION SELECT 'B' , 2 from dual
UNION SELECT 'C' , 1 from dual
UNION SELECT NULL , 1 from dual
UNION SELECT NULL , 2 from dual)
SELECT
   master,
   count(Col) over (partition by master)
FROM
  temp

Ответы [ 3 ]

4 голосов
/ 07 марта 2012

Или отфильтруйте их:

  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
3 голосов
/ 07 марта 2012

Ноль не равно равно нулю.Но с точки зрения агрегации нуль равен эквиваленту нулю.Это не аналитика, которая делает это;это сама агрегация.

  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
3 голосов
/ 07 марта 2012

Если вы не хотите отфильтровывать строки, где master НЕДЕЙСТВИТЕЛЕН, вы можете сделать что-то вроде

ВЫБРАТЬ мастера, Сумма (случай, когда хозяин обнуляется ТО 0 ELSE 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...