KDB: как напечатать строковый литерал вдоль каждой записи таблицы? - PullRequest
0 голосов
/ 26 ноября 2018

Как выбрать таблицу вместе со строковым литералом?

tab:flip `items`sales`prices!(`nut`bolt`cam`cog;6 8 0 3;10 20 15 20)

select a:"abcdef", items, sales from tab

Ожидаемый результат:

    a        items sales prices
    ----------------------------
    "abcdef" nut   6     10
    "abcdef" bolt  8     20
    "abcdef" cam   0     15
    "abcdef" cog   3     20

Ответы [ 3 ]

0 голосов
/ 26 ноября 2018

В случае, если вы просто хотите добавить новый столбец в таблицу;здесь мы используем скрытый столбец KDB index для подсчета записей.

q)update a:count[i]#enlist "abcdef" from tab
items sales prices a
---------------------------
nut   6     10     "abcdef"
bolt  8     20     "abcdef"
cam   0     15     "abcdef"
cog   3     20     "abcdef"
0 голосов
/ 26 ноября 2018

Вы можете сделать это в операторе выбора при условии, что изготовленный столбец не первый

q)select items,a:count[i]#enlist"abcdef",sales from tab
items a        sales
--------------------
nut   "abcdef" 6
bolt  "abcdef" 8
cam   "abcdef" 0
cog   "abcdef" 3

Если изготовленный столбец является первым, тогда он группирует значения в списки, для которых требуется ungroup

Альтернативным, но менее традиционным подходом было бы использование cross

q)([]a:enlist "abcdef")cross tab
a        items sales prices
---------------------------
"abcdef" nut   6     10
"abcdef" bolt  8     20
"abcdef" cam   0     15
"abcdef" cog   3     20
0 голосов
/ 26 ноября 2018

Вы можете сделать это:

 q) update a:count[t]#enlist "abcdef" from t:select items, sales from tab

Это также будет работать, если у вас есть предложение where:

  q)update a:count[t]#enlist "abcdef" from t:select items, sales from tab where sales<4

Вывод:

     a      items sales prices
    ----------------------------
    "abcdef" cam   0     15
    "abcdef" cog   3     20
...