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 は制約のリストです。

注-

  • ab 、および 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