sortCol

首发版本:3.00.6

语法

sortCol(expr, [asc=true], [nullsLast])

详情

生成指定空值排序规则的元代码,通常和 sql 函数配合使用。空值排序是指在升序或降序排列数据时,指定空值在结果集中的位置(置于开头或末尾)。

参数

expr STRING 或 CODE 类型,可以是标量或向量。

  • 当为 STRING 类型时,指定排序列的名称,比如 “value”。
  • 当为 CODE 类型时,指定列的计算表达式,比如 <price + volume>,查询时按计算结果排序。

asc BOOL 标量或向量,指定 expr 中各排序项的排序方向。true 表示升序,false 表示降序。默认为 true。

nullsLast BOOL 标量或向量,指定是否在排序时将空值置于末尾。true 表示置于末尾(nulls last), false 表示置于开头(nulls first)。默认为空,此时相当于指定为 false。

注:

exprascnullsLast 三者的长度必须相同。

返回值

表示空值排序规则的 CODE 标量或向量。sql 函数中的 csortorderBy 参数可以直接使用该返回值。

例子

例 1:指定单个排序列,在 SQL 查询中将空值置于末尾。

// 创建一张表,其中 value 列包含空值
t = table(1..5  as id, 5 8 NULL 2 NULL as value)
id value
1 5
2 8
3
4 2
5
// 按 value 列对数据进行升序排列,并将 value 列中空值对应的行置于末尾
sql(sqlCol("*"), t, orderBy=sortCol("value", true, true)).eval()
id value
4 2
1 5
2 8
3
5

例 2:指定多个排序列,在 SQL 查询中将一列的空值置于末尾,另一列的空值置于开头。

// 创建一张表,其中 price 列和 seq 列都包含空值
t = table(
    [1, 2, 3, 4, 5] as id,
    [10, NULL, 10, 20, NULL] as price,
    [NULL, 2, 1, 3, 4] as seq
)
id price seq
1 10
2 2
3 10 1
4 20 3
5 4
/*
price:降序排列,空值置于末尾
seq:升序排列,空值置于开头
*/
sql(sqlCol("*"), t, 
    orderBy=sortCol([`price, `seq], 
    [false, true], 
    [true, false])).eval()
id price seq
4 20 3
1 10
3 10 1
2 2
5 4

例 3:在 sql 函数中,将 sortCol 的返回值传给 csort 参数,并结合 limit 子句对组内数据排序。

// 创建一张表,其中每个 sym 分组内的 seq 列包含空值
t = table(
    [`A, `A, `A, `B, `B, `B] as sym,
    [3, NULL, 1, NULL, 2, 1] as seq,
    [30, 20, 10, 50, 40, 60] as value
)
sym seq value
A 3 30
A 20
A 1 10
B 50
B 2 40
B 1 60
// 生成 csort 使用的排序规则:按 seq 升序排列,并将空值置于末尾
sortRule = sortCol("seq", true, true)

// 在每个 sym 分组内,按 sortRule 排序后取前 2 条记录,排除包含空值的记录
sql(select=sqlCol("*"),
    from=t,
    groupBy=sqlCol("sym"),
    groupFlag=0,
    csort=sortRule,
    limit=2).eval()
sym seq value
A 1 10
A 3 30
B 1 60
B 2 40

相关函数:sqlsqlColeval