2015-03-04 2 views
1

У меня есть таблица с несколькими ячейками с нулевыми значениями (разбросанными по набору данных). Любой простой способ исключения всех строк, имеющих нуль в любом из своих столбцов?KDB Исключение строк с нулями

Я просто пытаюсь избежать этого ...

select from T where not null col1, not null col2, not null col3, etc... 

ответ

4

Либо использовать простые функции для списка легко читаемый код или функциональную форму для скорости. Функциональная форма будет быстрее, так как она не сканирует все столбцы только те, которые проходят каждый этап фильтра.

q)t:flip `a`b`c`d`e!flip {5?(x;0N)} each til 10 
q)t 
a b c d e 
--------- 
0  0 
    1 1 
    2 2 2 
3 3 3 3 
4 4 4 4 4 
     5 5 
     6 
7 7 
    8  8 
9 9 9 9 

// simple way 
q)where all each not null t 
,4 
q)t where all each not null t 
a b c d e 
--------- 
4 4 4 4 4 

// faster 
q)?[t;{(not;(null;x))} each cols t; 0b;()] 
a b c d e 
--------- 
4 4 4 4 4 
2

Добавление ответа Райана ..... если таблица имеет строку (гнездовой) столбцы, то вам необходимо изменить функциональную форму немного:

q)tab:([] col1:`a`b`c`d;col2:1 0N 3 0N;col3:"v vv";col4:0n 1.0 2.0 3.0;col5:("";"";"rf";"er")) 

q)tab 
col1 col2 col3 col4 col5 
------------------------ 
a 1 v   "" 
b    1 "" 
c 3 v 2 "rf" 
d   v 3 "er" 

Затем, используя нулевой отсчет, как индикатор нулевой строки:

q)?[`tab;not,'enlist each @[(null;0=count');"C"=exec t from meta tab],'cols tab;0b;()] 
col1 col2 col3 col4 col5 
------------------------ 
c 3 v 2 "rf" 
+0

EDIT - Мне не хватало «каждого», – terrylynch

Смежные вопросы