FirstSortedValue - 脚本函数
FirstSortedValue() 返回在 value 中指定的表达式的值,该值与 sort_weight 参数的排序结果对应,如果指定,还要考虑 rank。如果在指定 rank 下多个结果值共享同一 sort_weight,则此函数返回 NULL。
排序的值会迭代于 group by 子句定义的大量记录,或者如果 group by 子句未定义,就会在整个数据集之间聚合。
语法:
返回数据类型: 双
参数:
参数 | 说明 |
---|---|
value Expression | 此函数用于查找表达式 value 的值,相当于 sort_weight 的排序结果。 |
sort-weight Expression | 该表达式包含要排序的数据。找到 sort_weight 的第一个(最低)值,由 value 表达式的对应值确定。如果在 sort_weight 前面加一个减号,则此函数会返回最后一个(最高)排序值。 |
rank Expression |
通过指定一个大于 1 的 rank “n”,您会获得第 n 个排序值。 |
distinct |
如果在函数参数前出现单词 DISTINCT,则将忽略计算该函数参数生成的副本。 |
示例和结果:
将示例脚本添加到文档并运行。然后,至少要将结果列中列出的字段添加到文档中的表格才能查看结果。
示例 1:
Temp:
LOAD * inline [
Customer|Product|OrderNumber|UnitSales|CustomerID
Astrida|AA|1|10|1
Astrida|AA|7|18|1
Astrida|BB|4|9|1
Astrida|CC|6|2|1
Betacab|AA|5|4|2
Betacab|BB|2|5|2
Betacab|DD|12|25|2
Canutility|AA|3|8|3
Canutility|CC|13|19|3
Divadip|AA|9|16|4
Divadip|AA|10|16|4
Divadip|DD|11|10|4
] (delimiter is '|');
FirstSortedValue:
LOAD Customer,FirstSortedValue(Product, UnitSales) as MyProductWithSmallestOrderByCustomer Resident Temp Group By Customer;
结果字段(客户) | 结果值 (MyProductWithSmallestOrderByCustomer) |
---|---|
Astrida | CC |
Betacab | AA |
Canutility | AA |
Divadip | DD |
函数将 UnitSales 按从最小到最大的顺序排列,通过UnitSales 的最小值(最小顺序)寻找 Customer 的值。
因为 CC 与客户 Astrida 的最小顺序( UnitSales 的值 = 2)对应。AA 与客户 Betacab 的最小顺序 (4) 对应,AA 与客户 Canutility 的最小顺序 (8) 对应,而 DD 与客户 Divadip 的最小顺序 (10) 对应。
示例 2:
前提是 Temp 表格像之前的示例一样加载:
LOAD Customer,FirstSortedValue(Product, -UnitSales) as MyProductWithLargestOrderByCustomer Resident Temp Group By Customer;
结果字段(客户) | 结果值 (MyProductWithLargestOrderByCustomer) |
---|---|
Astrida | AA |
Betacab | DD |
Canutility | CC |
Divadip | - |
减号位于 sort_weight 参数之首,因此,该函数将最大的排在第一个。
因为 AA 与客户 Astrida 的最大顺序(UnitSales 的值:18)对应,DD 与客户 Betacab 的最大顺序 (12) 对应,而 CC 与客户 Canutility 的最大顺序 (13) 对应。客户 Divadip 的最大顺序 (16) 有两个相同的值,因此,它会生成空结果。
示例 3:
前提是 Temp 表格像之前的示例一样加载:
LOAD Customer,FirstSortedValue(distinct Product, -UnitSales) as MyProductWithSmallestOrderByCustomer Resident Temp Group By Customer;
结果字段(客户) | 结果值 (MyProductWithLargestOrderByCustomer) |
---|---|
Astrida | AA |
Betacab | DD |
Canutility | CC |
Divadip | AA |
这一点与之前的示例相同,使用了 distinct 限定符除外。在该子句中,Divadip 的重复结果会被忽略,从而允许返回非空值。