python - 如何从 SQLAlchemy 的子查询中选择不在 Group By 中的列?
问题描述
我有一个嵌套查询,我需要在其中选择另一列,该列不存在于 GROUP BY 中并且未聚合。
我的表:
class User(db.Model):
id = db.Column(db.Integer, primary_key=True)
class Question(db.Model):
id = db.Column(db.Integer, primary_key=True)
value = db.Column(db.Numeric)
questioner_id = db.Column(db.Integer, db.ForeignKey('user.id'))
class Guess(db.Model):
id = db.Column(db.Integer, primary_key=True)
amount = db.Column(db.Numeric)
question_id = db.Column(db.Integer, db.ForeignKey('question.id'))
这里是我当前尝试的 SQLAlchemy 查询:
sub_query = db.session\
.query(
Guess.question_id,
db.func.max(Guess.amount).label('highest_amount')
)\
.group_by(Guess.question_id,).subquery()
query = db.session.query(Question, sub_query.c.highest_amount)\
.join(sub_query, Question.id == sub_query.c.question_id)\
.all()
到目前为止,一切都很好。我的子查询在给定问题的所有放置猜测中选择最高数量。
我的问题/问题:如何从子查询中选择最高金额的用户 ID?我需要过滤问题,其中最高金额的猜测不是提问者。基本上类似于.filter(Question.questioner_id !=highest_guess_user?)
我试图在 group_by 中添加 user_id 但这会导致废话。请注意,同一用户可能会提交多个猜测。
谢谢!
编辑:如果有帮助,请在RAW SQL下面找到:
SELECT
question.id AS question_id,
questioner.id AS questioner_id,
max_guess.max AS max_guess,
FROM
question
JOIN (
SELECT
guess.question_id AS question_id,
max(guess.amount) AS max
FROM
guess
GROUP BY
guess.question_id
) AS max_guess ON question.id = max_guess.question_id
LEFT OUTER JOIN "user" AS questioner ON questioner.id = question.questioner_id
解决方案
推荐阅读
- react-native - 在下面的代码中 createappcontainer 没有渲染任何页面。只得到没有错误的白屏
- ios - 如何向我的 LocalizedStringKey 添加一些自定义文本?
- flutter - 如何从 MaterialPageRoute 中的构建器对象中获取 Widget 类名称
- qt - 如何使用 qml 中的加载器从另一个文件加载组件
- c# - 如何修复以下 LinQ 笛卡尔程序并使其正常工作?
- angular - Angular 库继承父应用程序模块
- azure-active-directory - 使用自动化脚本将来宾用户添加到 Azure AD?
- java - 在 pom.xml 中覆盖用于上传的存储库
- go - 服务器未响应 go echo 框架中的 API 调用
- excel - 如何删除小数点前的前导零?Excel 已格式化,但我的用户表单中的组合框正在添加它们