我有一个表,其中有一些具有空值的单元格(散布在数据集中)。是否有任何简单的方法可以排除任何列中具有null的所有行?
我只是想避免这种情况......
select from T where not null col1, not null col2, not null col3, etc...
答案 0 :(得分:5)
使用简单的列表函数来轻松读取代码 或速度的功能形式。 函数形式会更快,因为它不会扫描通过过滤器每个阶段的所有列。
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
答案 1 :(得分:2)
添加到Ryan的答案.....如果你的表有字符串(嵌套)列,那么你需要稍微修改一下函数形式:
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"