Kdbplus-q-language-functional-queries
提供:Dev Guides
Q言語-機能クエリ
機能的(動的)クエリを使用すると、一般的なq-sqlのselect/exec/delete列のシンボルとして列名を指定できます。 列名を動的に指定する場合に非常に便利です。
機能形態は次のとおりです-
?[t;c;b;a] /for select
![t;c;b;a] /for update
どこで
- t はテーブルです。
- a は集計の辞書です。
- b フレーズ。そして
- c は制約のリストです。
注-
- a 、 b 、および c のすべての q エンティティは、名前で参照する必要があります。これは、エンティティ名を含むシンボルとして意味します。
- selectおよびupdateの構文形式は、 q インタープリターによって同等の機能形式に解析されるため、2つの形式の間にパフォーマンスの違いはありません。
機能選択
次のコードブロックは、*機能選択*の使用方法を示しています-
q)t:([]n:`ibm`msft`samsung`apple;p:40 38 45 54)
q)t
n p
-------------------
ibm 40
msft 38
samsung 45
apple 54
q)select m:max p,s:sum p by name:n from t where p>36, n in `ibm`msft`apple
name | m s
------ | ---------
apple | 54 54
ibm | 40 40
msft | 38 38
例1
最も簡単なケースから始めましょう。*「select from t」*の機能バージョンは次のようになります-
q)?[t;();0b;()] /select from t
n p
-----------------
ibm 40
msft 38
samsung 45
apple 54
例2
次の例では、enlist関数を使用してシングルトンを作成し、適切なエンティティがリストであることを確認します。
q)wherecon: enlist (>;`p;40)
q)?[`t;wherecon;0b;()]/select from t where p > 40
n p
----------------
samsung 45
apple 54
実施例3
q)groupby: enlist[`p] ! enlist `p
q)selcols: enlist [`n]!enlist `n
q)?[ `t;(); groupby;selcols] /select n by p from t
p | n
----- | -------
38 | msft
40 | ibm
45 | samsung
54 | apple
機能実行
execの機能形式は、 select の簡略化された形式です。
q)?[t;();();`n] /exec n from t (functional form of exec)
`ibm`msft`samsung`apple
q)?[t;();`n;`p] /exec p by n from t (functional exec)
apple | 54
ibm | 40
msft | 38
samsung | 45
機能更新
更新の機能形式は、 select の機能形式と完全に類似しています。 次の例では、enlistを使用してシングルトンを作成し、入力エンティティがリストであることを確認します。
q)c:enlist (>;`p;0)
q)b: (enlist `n)!enlist `n
q)a: (enlist `p) ! enlist (max;`p)
q)![t;c;b;a]
n p
-------------
ibm 40
msft 38
samsung 45
apple 54
機能削除
機能削除は、機能更新の簡略化された形式です。 その構文は次のとおりです-
![t;c;0b;a] /t is a table, c is a list of where constraints, a is a
/list of column names
機能的な削除がどのように機能するかを示すために例を見てみましょう-
q)![t; enlist (=;`p; 40); 0b;`symbol$()]
/delete from t where p = 40
n p
---------------
msft 38
samsung 45
apple 54