如何在烧瓶SQL炼金术中使用分组依据

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在烧瓶SQL炼金术中使用分组依据相关的知识,希望对你有一定的参考价值。

我有两个桌子

class MinMaxDim(db.Model):
   min_max_id = db.Column(db.Integer, primary_key=True)
   user_id = db.Column(db.Integer, nullable=False)
   room_id = db.Column(db.Integer, nullable=True)
   min_temp = db.Column(db.Integer, nullable=True)
   max_temp = db.Column(db.Integer, nullable=True)
   min_humidity = db.Column(db.Integer, nullable=True)
   max_humidity = db.Column(db.Integer, nullable=True)
   min_pressure = db.Column(db.Integer, nullable=True)
   max_pressure = db.Column(db.Integer, nullable=True)


class AvgDim(db.Model):
  avg_id = db.Column(db.Integer, primary_key=True)
  user_id = db.Column(db.Integer, nullable=False)
  room_id = db.Column(db.Integer, nullable=True)
  avg_temp = db.Column(db.Integer, nullable=True)
  avg_humidity = db.Column(db.Integer, nullable=True)
  avg_pressure = db.Column(db.Integer, nullable=True)

需求:

  • 我将把room_id作为参数发送给函数,它应该返回两个表中最近7天的min_temp,max_temp和avg_temp值。

我尝试过的:

我创建了一个函数,因为我已经使用了group_by函数,但出现此错误:

  (psycopg2.errors.GroupingError) column "min_max_dim.min_max_id" must appear in the GROUP BY clause 
   or be used in an aggregate function

我的代码

     def get_weekly_dim_dataInfo(room_id):
        try:
           get_all_data = db.session.query(MinMaxDim).outerjoin(AvgDim, MinMaxDim.user_id ==
                           MinMaxDim.tenant_id).group_by(MinMaxDim.room_id).all()
           get_all_data_schema = MinMaxDimSchema(many=True).dump(get_all_data)
           get_all_avg_data_schema = AvgDimSchema(many=True).dump(get_all_data)
           print(get_all_data)
         except Exception as e:
             print(e)
             return False
答案

您能尝试这个吗:

get_all_data = db.session.query(MinMaxDim).outerjoin(AvgDim, MinMaxDim.user_id == MinMaxDim.tenant_id).group_by(MinMaxDim.min_max_id, MinMaxDim.room_id).all()

正如错误所暗示的,您需要在group by子句中包含min_max_id

不过,奇怪的是,您可以重构模型,以便利用postgresql aggregate函数,而不必尝试围绕汇总结果进行建模。

以上是关于如何在烧瓶SQL炼金术中使用分组依据的主要内容,如果未能解决你的问题,请参考以下文章

SQL 中 XML 路径的分组依据

选取 SQL“分组依据”中的任何元素

带有排序依据的 SQL 分组依据

SQL Server 数据透视 + 总和 + 分组依据

在猪中使用过滤器和分组依据

SQL 语法问题 - 分组依据 - Oracle