2017-08-01 11 views
0

テーブル内の行を検索し、それらをマージして値を変更する必要があります。SqlAlchemy行のクエリ/マージ

例:

id_sender id_receiver nb_mails 
    3   4   10 
    1   2   13 
    4   3   5 

ので、私はこのようなresultatを取得したい:

id_1 id_2 nb_communication 
3  4  15 
1  2  13 

はSQLAlchemyので行うことがすることが可能ですか私は自分の治療を行う必要がありますか?で解決

q = session.query(
        label('id_1' ,func.least(table.initiator_id, table.receiver_id)), 
        label('id_2', func.greatest(table.initiator_id, table.receiver_id)), 
        label('nb_communication', func.sum(table.nb_mails)) 
       ).order_by("nb_communication").group_by('id_1', 'id_2').all() 
+0

使用しているデータベースで質問にタグを付けてください。 –

+0

SQLで実行可能な場合は、SQLAlchemyで実行できることがよくあります。何か試しましたか? –

+1

はい、このことを試してみましたが、それは私の仕事でした: q = session.query( ラベル( 'id_1'、func.least(table.initiator_id、table.receiver_id))、 ラベル( 'id_2'、func.greatest group_by( 'id_1'、 'id_2')。すべての(すべての(1つの)IDが、 ) – xsimsiotx

答えて

1

ほとんどのデータベースはleast()greatest()機能をサポートしています。あなたは行うことができます。

select least(id_sender, id_receiver) as id_1, 
     greatest(id_sender, id_receiver) as id_2, 
     sum(nb_mails) as nb_communication 
from t 
group by least(id_sender, id_receiver), 
     greatest(id_sender, id_receiver); 

データベースがこれらの機能をサポートしていない場合、あなたはcaseを使用して同様の何かを行うことができます。

+0

に編集しました。これは、sqlalchemyで私の問題を解決するアイデアを見つけるのに役立ちました – xsimsiotx