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) |
英文版