KDB的案例时声明

问题描述

更熟悉sql语句-具有此列表VENUE。该列包含诸如NYSE,NASDAQ,CBOE等字符串。我想创建一个新列,并根据VENUE值对其进行定义。

因此在sql中,我会声明-

select VENUE,Case when VENUE = 'NYSE' then 'Primary'
when VENUE <> 'NYSE then 'NotPrimary'
else VENUE end as VenueType 
from data

我如何在kdb中实现这一目标?任何指导都将不胜感激。

解决方法

我对SQL语法不熟悉,但是看起来您应该可以像这样使用vector conditional operator

 q)show t:([]VENUE:`NYSE`NYSE`ASX`NZX`TKO)
VENUE
-----
NYSE
NYSE
ASX
NZX
TKO
q)update VENUETYPE:?[`NYSE=VENUE;`Primary;`NotPrimary] from t
VENUE VENUETYPE
----------------
NYSE  Primary
NYSE  Primary
ASX   NotPrimary
NZX   NotPrimary
TKO   NotPrimary
,

正如Michael指出的那样,向量条件只有当结果值(主要/非主要)较少时才起作用。在更常见的情况下,可能会有许多结果值,那么最好使用字典重新映射值。

d:`NYSE`ASX`NZX`TKO!`case1`case2`case2`case3;
q)update VenueType:d[VENUE] from t
VENUE VenueType
---------------
NYSE  case1
NYSE  case1
ASX   case2
NZX   case2
TKO   case3

您可以将未映射的查询留空

q)d:`NYSE`ASX!2#`primary
q)update VenueType:d[VENUE] from t
VENUE VenueType
---------------
NYSE  primary
NYSE  primary
ASX   primary
NZX
TKO

或使用默认值填充

q)update VenueType:`notPrimary^d[VENUE] from t
VENUE VenueType
----------------
NYSE  primary
NYSE  primary
ASX   primary
NZX   notPrimary
TKO   notPrimary

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...