向表添加“总和”行

时间:2018-07-28 19:59:30

标签: kdb

我有一个查询,该查询创建一个表,按部门(上衣,下装,珠宝等)划分销售数据。然后,我设置一个日期期限,并将每个部门的总销售额,项目和成本汇总为单独的列。

我现在想在表格中添加一个“总计”行。我认为可以通过使用insert来处理:

`SalesByDept insert (enlist `total;sum(QTY);sum(Sales);sum(Cost))

这行不通,但奇怪的是,我什至不能只通过这样做插入总行

`SalesByDept insert (enlist `total;1;1;1)
  

错误:“类型”

有人知道我要绊倒吗?

1 个答案:

答案 0 :(得分:3)

这里的type错误告诉您您要插入的值之一与要插入的列不符。

我想象它是cost列,很可能是表格中的float。无论哪种方式,您都可以通过以下方式找出错误的列:

q)t:([]dep:();qty:();sales:();cost:()); `t insert (10?`1;10?10;10?1000;10?1000.);
q)t2:select sum qty, sum sales, sum cost by dep from t; newrow:(`total;1;1;1)
q)// what columns are matching
q)exec c where type'[newrow]<>neg .Q.t?t from meta t2
,`cost
q)// what's the diffs
q)// t2 cost type
q)meta[t2][`cost;`t]
"f"
q)// newrow cost type
q).Q.t abs type newrow cols[t2]?`cost
"j"
q)// change to expected type (leading dot makes it a float type) and see if insert works
q)newrow:(`total;1;1;1.)
q)// works now
q)`t2 insert newrow
,8

插入“总计”行的另一种方式,而不必担心类型:

`t2 upsert (enlist[`dep]!enlist `total),last sums t2

HTH,肖恩