10. 累积计算查询

 

在文件 meteorolog.txt 中,存储了一些观测站在 2023 年的气象数据。请根据这些数据,查询各个观测站,在哪一天的降水数据 PRCP 刚好超过全年的一半,列出当日的观测记录。

参考答案:

解答:

A
1 =T(“meteorolog.txt”,STATION,DATE,PRCP)
2 =A1.groups(STATION;round(sum(PRCP), 2):TotalPRCP)
3 =A1.join(STATION,A2,TotalPRCP)
4 =A3.group(STATION)
5 =A4.(~.select@1(iterate(~~+PRCP;0)>TotalPRCP/2)).conj()

A1 从表中获取数据,A2 先行统计各个观测站的全年降水如下:

从表中数据其实可以发现,某些观测站的数据存在问题,如 BINHAI 站无降水数据,但是这样的情况并不会影响最终结果,也可以提前将这类数据过滤掉。

A3 中通过外键将观测数据与站点统计数据表做关联,以便于使用年度降水数据。

A4 按不同的观测站将数据分组,A5 在各个分组中分别统计,在 select 函数中添加了 @1 选项,选出第一条使得降水量达标的记录,将各个观测站的结果合并起来,得到最终数据。

除了上述方法,也可以在 A3 中用 A.switch() 将观测站的汇总数据与观测原始数据做关联,再继续后面的计算。这种方式在返回的最后结果中,STATION 的数值将是对应的汇总记录,也可以在返回前将其回复为原始的主键值,即:

A
1 =T(“meteorolog.txt”,STATION,DATE,PRCP)
2 =A1.groups(STATION;round(sum(PRCP), 2):TotalPRCP)
3 >A1.switch(STATION, A2)
4 =A1.group(STATION)
5 =A4.(~.select@1(iterate(~~+PRCP;0)>STATION.TotalPRCP/2)).conj()
6 >A1.switch(STATION)