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
相关产品推荐
相关产品推荐

