
- KDB+ 教程
- KDB+ - 首頁
- Q 程式語言
- Q 程式語言
- Q 語言 - 型別轉換
- Q 語言 - 時間資料
- Q 語言 - 列表
- Q 語言 - 索引
- Q 語言 - 字典
- Q 語言 - 表格
- Q 語言 - 動詞 & 副詞
- Q 語言 - 連線
- Q 語言 - 函式
- Q 語言 - 內建函式
- Q 語言 - 查詢
- Q - 程序間通訊
- Q - 訊息處理器 (.Z 庫)
- KDB+ 有用資源
- KDB+ - 快速指南
- KDB+ - 有用資源
- KDB+ - 討論
Q 語言 - 函式式查詢
函式式(動態)查詢允許將列名指定為符號,用於典型的 q-sql select/exec/delete 列。當我們想要動態指定列名時,它非常方便。
函式式形式為:
?[t;c;b;a] / for select ![t;c;b;a] / for update
其中
t 是一個表格;
a 是一個聚合字典;
b 是 by-短語;以及
c 是一個約束列表。
注意:
a、b 和 c 中的所有 q 實體都必須按名稱引用,即包含實體名稱的符號。
select 和 update 的語法形式由 q 直譯器解析為等效的函式式形式,因此兩種形式之間沒有效能差異。
函式式 select
以下程式碼塊顯示瞭如何使用 函式式 select:
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
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
函式式 Update
update 的函式式形式與 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
函式式 Delete
函式式 delete 是函式式 update 的簡化形式。其語法如下:
![t;c;0b;a] / t is a table, c is a list of where constraints, a is a / list of column names
現在讓我們舉一個例子來說明函式式 delete 如何工作:
q)![t; enlist (=;`p; 40); 0b;`symbol$()] / delete from t where p = 40 n p --------------- msft 38 samsung 45 apple 54
廣告