【问题标题】:Distinct select and max in SQLAlchemySQLAlchemy中的不同选择和最大值
【发布时间】:2015-11-04 20:49:24
【问题描述】:

我有下表:

id | user_id | name | value
----------------------------
1  |       1 | so   | 1
2  |       1 | os   | 2
3  |       2 | so   | 3
4  |       2 | os   | 4
5  |       2 | os   | 7

如何选择具有 name == "os" 和 ma​​x(value 的不同 users 行) 在 list 中使用 sqlalchemy 的值在哪里?

补充, 可能没用 ,信息:我正在使用带有金字塔的 sqlalchemy

这与我尝试过的类似:

ResVar = DBSession.query(tableModel.id, tableModel.user_id, tableModel.name, tableModel.value, func.max(tableModel.value)).filter(tableModel.value.in_(list(checkList))).filter(tableModel.name == "so").group_by(tableModel.user_id).all()

这和我的模型很相似:

class tableModel(Base):
    __tablename__ = 'table'
    id = Column(Integer,primary_key=True)
    name = Column(String(100))
    value = Column(String(200))
    user_id = Column(Integer,ForeignKey('user.id'))
    user = relationship("user",foreign_keys=[user_id])

    def __init__(self, user_id,name,value):
        self.user_id = user_id
        self.name = name
        self.value = value

预期结果:

1 |    1 | so  | 1
3 |    2 | so  | 3

【问题讨论】:

  • 您能否附上您的模型类的源代码并编写您迄今为止尝试过的代码?
  • @MikkoOhtamaa 我已经添加了模型和查询。还需要什么吗?
  • 能否根据示例表数据添加示例结果行。

标签: python sqlite sqlalchemy pyramid


【解决方案1】:

因为SQLite不支持DISTINCT ON,所以我们必须使用GROUP BY user_id

T = tableModel
q = session.query(T.id, T.user_id, T.name, func.max(T.value)) \ 
           .filter(T.name=='so') \
           .filter(T.value.in_([1, 2, 3, 4])) \
           .group_by(T.user_id)

导致以下行:

(1, 1, u'so', u'1')
(3, 2, u'so', u'3')

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-01-11
    • 1970-01-01
    • 1970-01-01
    • 2013-10-20
    • 2016-09-08
    • 2015-03-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多