1

@data := sum(field_name)MySQL Selectステートメント内のように、特定のフィールドの合計を変数に格納しようとしています。

以下は私のクエリの正確な例です:

SELECT a.id, @data1:=sum(b.amount) amount, @data1 as returned_val
FROM tbl_table1 a 
LEFT JOIN tbl_table2 b ON b.acount_id=a.id
GROUP BY a.id

sum(b.amount)を変数に格納し、@data1それを別の行に表示しようとしましたが、期待どおりに機能しないことに注意してください。

これを行う他の方法はありますか?

4

2 に答える 2

5

GROUP BY 句を含む SELECT ステートメントで変数を使用しないでください。

ドキュメントから:

注: SELECT ステートメントでは、各式はクライアントに送信されたときにのみ評価されます。これは、HAVING、GROUP BY、または ORDER BY 句では、SELECT リストに設定された変数を含む式を参照できないことを意味します。

サブクエリを使用してこれを達成します -

SELECT t.id, @data1:=t.amount, @data1 AS returned_val FROM (
    SELECT a.id, SUM(b.amount) amount
    FROM tbl_table1 a 
    LEFT JOIN tbl_table2 b ON b.acount_id=a.id
    GROUP BY a.id
  ) t
于 2012-09-25T07:52:50.123 に答える
0

最初に変数を宣言する必要があります。

SET @data1=0;

SELECT a.id, (@data1:=sum(b.amount)) as amount, @data1 as returned_val
FROM tbl_table1 a 
LEFT JOIN tbl_table2 b ON b.acount_id=a.id

returned_valしかし、 と同じ値であるため、なぜ が必要なのですかamount

于 2012-09-25T07:47:01.300 に答える