3.2.1计算唯一值

在序表的所有记录中,有一些字段的值是各不相同的,如编号等。而更多的字段,有可能出现重复值,有时会需要列出所有不同的值,可以使用id函数,如:

 

A

1

=file("Order_Books.txt").import@t()

2

=A1.id(SalesID)

3

=A1.id(PName)

其中,A1中序表如下,窗口中只显示了部分数据:

A2中,取出所有不同的销售员编号SalesIDA3中取出所有不同的书籍名称PNameA2A3中的结果如下:

 

从结果中可以发现,用id函数计算唯一值时,会将结果升序排序。

 

实际上,id函数返回的结果,类似于SQL中的distinct语句,如:

 

A

1

=demo.query("select * from EMPLOYEE")

2

=A1.id(STATE)

3

=demo.query("select distinct STATE from EMPLOYEE")

A1中从数据库中选出了员工资料表如下:

A2中用id函数从A1的序表中选出所有不同的州,而A3中用distinct语句从数据库中获取结果。A2A3中的结果如下:

 

可以看到,两种方法返回的数据相同。但是id函数返回的是序列,而用SQL语句从数据库返回的是序表。

 

有些时候,我们不希望将原始顺序打乱,此时可以添加@o选项,如:

 

A

1

=demo.query("select * from EMPLOYEE")

2

=A1.id@o(STATE)

此时,A2中的结果如下:

从结果中可以发现,id@o函数在执行时,不排序,但只是直接去除相邻的同值数据,结果中有可能出现重复的值,如上面结果中的TexasCalifornia等。

 

使用id函数时,也可以不选用字段,而是列出某个表达式的所有不同结果:

 

A

1

=demo.query("select * from EMPLOYEE")

2

=A1.id@o(age(BIRTHDAY))

A2中列出了员工的年龄: