У меня есть определенный набор данных, который я выбрал, как показано ниже:
tbl: select qtix by name, ptype from data
Что дает следующий результат:
| name | ptype | qtix |
-----------------------
| ABCD | `BLUE | 132 |
| PQRS | `BLUE | 140 |
| PQRS | `RED | 260 |
| VXYZ | `BLUE | 116 |
...
Я сделал это, поскольку этот набор данных позже будет отфильтрован на основе ptype
, но сейчас я хочу собрать его обратно так, чтобы name
было единственным отдельным полем, т. е.:
| name | ptype | qtix |
-----------------------------
| ABCD | `BLUE | 132 |
| PQRS | `BLUE`RED | 400 |
| VXYZ | `BLUE | 116 |
...
Я попытался сделать это через:
tbl: select by name from tbl
Но вместо этого для отображения выбирается только одна из двух строк, а не объединять их вместе, однако я не уверен, как выполнить соединение по строкам, а не по столбцам.
Любая помощь будет принята с благодарностью!
Вы можете использовать ключевое слово ungroup
. (https://code.kx.com/q/ref/ungroup/)
q)show tbl:([] name:`a`c`c`a; ptype:`blue`blue`red`blue; qtix:4?10)
name ptype qtix
---------------
a blue 7
c blue 1
c red 9
a blue 1
q)show tbl:select qtix by name,ptype from tbl
name ptype| qtix
----------| ----
a blue | 7 1
c blue | ,1
c red | ,9
q)show tbl:ungroup tbl
name ptype qtix
---------------
a blue 7
a blue 1
c blue 1
c red 9
q)show tbl:select ptype,qtix by name from tbl
name| ptype qtix
----| --------------
a | blue blue 7 1
c | blue red 1 9
q)show tbl:ungroup tbl
name ptype qtix
---------------
a blue 7
a blue 1
c blue 1
c red 9
Обратите внимание, что (из документации):
разгруппировать не является полной инверсией группировки
Группировка сортирует ключи, поэтому последующая разгруппировка возвращает исходные записи, отсортированные по сгруппированным столбцам.
Также обратите внимание, что если вы это сделаете:
tbl: select by name from tbl
Вы выбираете только последнюю запись имени.