You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

DuckDB查询用户订单支付平均分钟耗时报错如何解决

问题说明

现有一张名为trans的业务表,需求为统计表中每个用户成功支付订单的平均耗时,统计单位为分钟。
trans表结构预览

初始实现代码如下:

import duckdb
con = duckdb.connect(database=':memory:')
con.execute("""
select member_id, AVG(datediff(minute, order_date, payment_date)) as AverageTime
from trans
where purchase_succesfull = 'Yes'
group by member_id; 
""").df()

代码运行抛出异常:Referenced column "minute" not found in FROM clause!

报错原因

DuckDB的时间差函数datediff对参数格式要求和MySQL等其他SQL方言不同:函数的第一个参数时间单位必须是带单引号的字符串常量,裸写minute会被SQL解析器识别为从from子句的表中查找名为minute的字段,因此触发列不存在的报错。

额外提示:你代码中过滤条件写的字段名purchase_succesfull存在拼写偏差(正确拼写应为purchase_successful),如果建表时字段名确实为你写的拼写可忽略该提示,否则需要同步修正避免触发字段不存在报错。

修正代码

给时间单位参数加上单引号即可正常运行:

con.execute("""
select 
  member_id, 
  AVG(datediff('minute', order_date, payment_date)) as AverageTime
from trans
where purchase_succesfull = 'Yes'
group by member_id; 
""").df()

如果需要计算全平台所有用户的整体平均支付耗时,去掉查询字段中的member_id和group by member_id子句即可。

内容的提问来源于stack exchange,提问作者Duta

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.02 05:00:45