2016-05-16 17 views
0

SQLAlchemyサブクエリについて多くのことを読んでいますが、どういうわけか何とか私の問題に適用されると思います。SQLAlchemyサブクエリは、このシナリオで適用されますか

私は、次の2を持っているが、私はこの

for i in isp_ratings_per_service: 
    (round(i.avg_of_ratings))) 
    ratings_table_values = Ratings.query.filter_by(rating_value=(round(i.avg_of_ratings))) 
ように、この値に基づいて、別のテーブル内のデータを選択するには、この行に格納された値

func.avg(Service_metric_ratings.ratings_id).label('avg_of_ratings'), 

を使用したい

Query 1=>isp_ratings_per_service = db.session.query(func.count(Ratings.ratings_value).label('count_of_users'), 
               func.sum(Ratings.ratings_value).label('sum_of_ratings'), 
               func.avg(Ratings.ratings_value).label('avg_of_ratings'), 
               Isps.isp_name, Service_metric.metric_name, Services.service_name) \ 
     .filter(Service_metric_ratings.isp_id == Isps.isp_id) \ 
     .filter(Service_metric_ratings.ratings_value == Ratings.ratings_value) \ 
     .filter(Service_metric_ratings.metric_id == Service_metric.metric_id) \ 
     .filter(Service_metric_ratings.user_id == User.user_id) \ 
     .filter(Service_metric_ratings.service_id == Services.service_id) \ 
     .filter(Service_metric.metric_name == metric_name) \ 
     .filter(Services.service_name == service_name) \ 
     .group_by(Isps.isp_name) 

Query 2 => ratings_table_values = db.session.query(Ratings.rating_value, Ratings.rating_comment) 

を問い合わせます

副問合せを使用してそれらを1つの問合せに入れることは可能ですか、現時点で問題は作成することです■1つのクエリは、私が望む結果を与える場合、私は希望

{% for i in ratings_table_values %} 
<tr> 
    <td>{{ i.rating_value}}</td> 
    <td>{{ i.rating_comment}}</td> 
{% endfor %} 

{% for i in isp_ratings_per_service %} 
blah blah blah 
{% endfor %} 

次のように私が望む結果を与えていないフラスコテンプレートで2回の反復、

+1

'Ratings'に参加する必要があるようです。あなたは 'Ratings'テーブルの' rating_value'カラムの代わりに 'Ratings'のIDを合計し平均しているようです。 – univerio

+0

@univerioはい、あなたは正しいです、私はそれに応じて私のクエリを編集している、私はそれが動作していたと思うratings_idとrating_valueは同じ値を持っていた....違いは、ratings_idプライマリキーだったので、 rating_valueをそのテーブルの主キーにしました – Chamambom

答えて

0

私は自分の質問を修正するために管理このように、クエリは分離されており、結合とそれが完全に動作する必要はありません。私はJinjaで自分のロジックを開発しました

{% for i in isp_ratings_per_service %} 
    <td>{{ i.isp_name }}</td> 
    <td>{{ i.metric_name }}</td> 
    <td>{{ i.service_name }}</td> 
    <td>{{ i.count_of_users }}</td> 
    <td>{{ i.sum_of_ratings }}</td> 
    <td>{{ i.avg_of_ratings|round|int }}</td> 
     {% for m in ratings_table_values %} 
      {% if (m.ratings_value) ==(i.avg_of_ratings|round|int)%} 
       <td>{{ m.ratings_comment}}</td> 
      {% endif %} 
     {% endfor %} 
    </tr> 
    {% else %} 
    <tr><td colspan="7"><em>No entries here so far</em></td></tr> 
    {% endfor %} 
関連する問題