如何自动统计Verisk Touchstone中每10年飓风事件记录数?
批量统计每10年飓风事件数的高效方案
不用逐个编写区间查询,直接通过SQL分组一次性计算所有10年区间的事件数据,大幅节省时间:
核心SQL脚本(YearID为连续编号,如1、2...2000)
SELECT CONCAT(FLOOR((YearID - 1)/10)*10 + 1, ' 至 ', FLOOR((YearID - 1)/10)*10 + 10) AS 十年区间, COUNT(*) AS 事件记录总数, COUNT(*)/10.0 AS 年均事件数量 FROM [dbo].[t1_HAZ_Intensity] GROUP BY FLOOR((YearID - 1)/10) ORDER BY FLOOR((YearID - 1)/10);
适配实际年份的脚本(YearID为实际年份,如2000、2001...)
如果你的YearID是真实年份值,修改分组逻辑即可:
SELECT CONCAT(FLOOR(YearID/10)*10, ' 至 ', FLOOR(YearID/10)*10 + 9) AS 十年区间, COUNT(*) AS 事件记录总数, COUNT(*)/10.0 AS 年均事件数量 FROM [dbo].[t1_HAZ_Intensity] GROUP BY FLOOR(YearID/10) ORDER BY FLOOR(YearID/10);
效率提升关键点
- 仅扫描一次数据表:原来的方式每查一个区间就要扫一次表,数据量越大耗时差距越显著
- 自动覆盖所有区间:无需手动编写几十上百条重复的SELECT语句
- 按需统计:避免
SELECT *返回冗余数据,只计算需要的统计值,减少资源消耗
额外优化
- 给
YearID字段添加索引,进一步加快分组查询的速度 - 如果只需要特定时段的统计,可在WHERE子句中添加年份范围过滤,比如
WHERE YearID BETWEEN 1 AND 2000
内容的提问来源于stack exchange,提问作者luca clavarino
相关产品推荐
相关产品推荐

