1

为了获得适当的表行数,我想使用一种简单的方法:使用count 1构造。它适用于一个简单的案例:

q)t:([]sym:`a`a`b`b);
q)select cnt: count 1 by sym from t
sym| cnt
---| ---
a  | 2
b  | 2

但是当我添加其他字段时,我得到了错误的结果:

q)select cnt: count 1, sym by sym from t
sym| cnt sym
---| -------
a  | 1   a a
b  | 1   b b

为什么count 1在一个列案例中有效(或看起来如此)并且在多个列中失败?


更新:预计会得到这样的东西

sym| cnt sym
---| -------
a  | 2   a a
b  | 2   b b
4

1 回答 1

1

我认为count 1不会产生您正在寻找的结果,甚至不会产生一致的结果。

我想你可能想count i改用。选择by sym时,您要指定要计数的列。

q)t:([]sym:`a`a`b`b)
q)select cnt:count i,sym by sym from t
sym| cnt sym
---| -------
a  | 2   a a
b  | 2   b b
q).z.K
3.6

但是需要注意的一点是,此解决方案不适用于 kdb+ 4.0。

q)t:([]sym:`a`a`b`b)
q)select cnt:count i,sym by sym from t
'dup names for cols/groups sym
  [0]  select cnt:count i,sym by sym from t
                                    ^
q).z.K
4f
于 2021-02-01T13:43:53.220 回答