如何使用RawSQL注释字段?

    sql_query = """
            SELECT 
                c.id, 
                COALESCE(SUM((cm.temp_min + cm.temp_max) / 2 - %s), 0) AS gdd
            FROM 
                agriculture_commune c
            LEFT JOIN 
                agriculture_communemeteo cm ON c.id = cm.commune_id
            WHERE 
                cm.date BETWEEN %s AND %s
            GROUP BY 
                c.id
        """
    communes =  communes.raw(sql_query, [TBASE, start_date, end_date])

如果我试着这样做,

communes.annotate(gdd=RawSQL(sql_query, [TBASE, start_date, end_date]))

我得到错误"子查询必须只返回一个列\n行1:... mmune "

推荐答案

正如错误所说,当使用RawSQL注释字段时,您提供的SQL查询应该每行只返回一个值,因为它被用作生成注释查询集的更 bigquery 的一部分.

所以你需要使用这样的查询,它只返回一个值:

SELECT 
    COALESCE(SUM((cm.temp_min + cm.temp_max) / 2 - %s), 0) AS gdd
FROM 
    agriculture_communemeteo cm
WHERE 
    cm.commune_id = agriculture_commune.id AND
    cm.date BETWEEN %s AND %s

然后就像你做的那样注释:

communes.annotate(gdd=RawSQL(sql_query, [TBASE, start_date, end_date]))

Python相关问答推荐

多处理代码在while循环中不工作

使用numpy提取数据块

Pandas实际上如何对基于自定义的索引(integer和非integer)执行索引

连接两个具有不同标题的收件箱

Excel图表-使用openpyxl更改水平轴与Y轴相交的位置(Python)

在Python中管理打开对话框

Polars:用氨纶的其他部分替换氨纶的部分

如何将一个动态分配的C数组转换为Numpy数组,并在C扩展模块中返回给Python

如果值发生变化,则列上的极性累积和

组/群集按字符串中的子字符串或子字符串中的字符串轮询数据框

在vscode上使用Python虚拟环境时((env))

计算每个IP的平均值

不能使用Gekko方程'

实现神经网络代码时的TypeError

启用/禁用shiny 的自动重新加载

ModuleNotFoundError:没有模块名为x时try 运行我的代码''

如何求相邻对序列中元素 Select 的最小代价

如何将相同组的值添加到嵌套的Pandas Maprame的倒数第二个索引级别

Polars表达式无法访问中间列创建表达式

try 在单个WITH_COLUMNS_SEQ操作中链接表达式时,使用Polars数据帧时出现ComputeError