私は現在、SQLAlchemyのを学んだし、私はこのようになりますレビューモデルがあります:SQLAlchemyのを使用してSQLAlchemyクエリからAVGを取得するには?
class Review(Base):
__tablename__ = "reviews"
id = Column(Integer, primary_key=True)
raw_score = Column(String(150))
score = Column(Float, nullable=False)
summary = Column(String(150), nullable=False)
review = Column(String(1500), nullable=False)
source = Column(String)
product_id = Column(Integer, ForeignKey('products.id'), nullable=False)
reviewer_id = Column(Integer, ForeignKey('reviewers.id'), nullable=False)
を、私は特定の製品に関連するすべてのレビューを取得することができるよとレビューがない場合には評論家:
reviews = session.query(Review).join(Review.reviewer).\
filter(Review.product == product).\
filter(Reviewer.critic == False).\
values(Reviewer.critic,
Reviewer.display_name,
Review.raw_score,
Review.score,
Review.review,
Review.source)
私はその後、別のクエリは私に評論家と非評論家によって書かれたスコアの平均値を取得するためにしようと:
critic_avg = session.query(func.avg(Review.score)).filter(Review.product == product).\
filter(Reviewer.critic == True)
not_critic_avg = session.query(func.avg(Review.score)).filter(Review.product == product).\
filter(Reviewer.critic == False)
しかし、これは私に期待値を返すものではなく、常に製品の平均点を返すようです。製品のフィルタが機能しているように見えますが、Filter for Criticはそうではありません。
予想される非評論平均:2.75
実際の非評論平均:2.75
(まだDBに批評家です何のレビューはありません)
予想評論平均:0.00
実際の批評平均:2.75
上記の明らかな不具合があり、より効率的な方法これを覚えてください。私はレビューのために質問したのと同時にこの問題に対処できましたか?
いつも、ありがとうございます。
これは本当に役に立ちました。 query.as_scalar()を指摘してくれてありがとうございます – pyNovice89
そのような質問や表現は、as_scalarを使って最初にスカラーサブクエリを作成する必要はありません。 –
@IljaEverilä恥ずかしい、私はこれについて知らなかった。どうもありがとう! –