如何在DuckDB中将INTERVAL转换为毫秒数以实现聚合计算?
DuckDB中INTERVAL类型聚合计算的解决方案
DuckDB不支持直接对INTERVAL类型执行sum()这类聚合函数,报错提示很明确——得先转成数值类型计算,再转回INTERVAL。
简便转换方法
不用手动拆分年、月、日、时分秒写复杂公式,直接用extract(epoch from interval_col)函数,它能把INTERVAL直接转换成以秒为单位的浮点数,自动处理所有时间单位的转换,省心又准确。
求和示例
计算所有downtime的总时长,最终转回INTERVAL类型:
SELECT to_interval(sum(extract(epoch from duration))) AS total_duration FROM downtimes;
如果需要以毫秒为单位计算,先把秒数乘1000,再用to_milliseconds转回INTERVAL:
SELECT to_milliseconds(sum(extract(epoch from duration) * 1000)) AS total_duration_ms FROM downtimes;
百分比计算示例
计算单条downtime时长占总时长的百分比:
WITH total_duration AS ( SELECT sum(extract(epoch from duration)) AS total_epoch FROM downtimes ) SELECT duration, ROUND((extract(epoch from duration) / total_duration.total_epoch) * 100, 2) AS duration_percentage FROM downtimes, total_duration;
内容的提问来源于stack exchange,提问作者ejoubaud
相关产品推荐
相关产品推荐

