2012-01-15 11 views
3

私は今まで成功していないクエリでそれを使用するために、合計の結果を変数に格納しようとしています。 SELECT @pos := 'titi' "c1", @pos "c2"; 条件付きのグループでmysqlユーザ定義変数を使用する

titi | titi

  • 私は機能によってグループでそれをしようとすると、それだけでは動作しません:私はそれを試してみた、それは私が期待されるだけのように働いた

    • もはや、変数を最後に処理された関数に設定します。

    SELECT c1, @titi := SUM(c2), @titi FROM (SELECT 1 "c1",2 "c2" UNION SELECT 2,3 UNION SELECT 1,4) t GROUP BY c1;

    実際の出力

    1、6、3

    2、3、3

    所望の出力

    1、6、6

    2、3、3

    私は、変数が行単位でその価値を維持するために何ができますか?

+0

クエリの構文が正しくありません。そして、あなたが達成しようとしていることは明確ではありません。次のクエリで使用するものはすべて保存しますか?なぜ副問合せを使用しないのですか? – newtover

答えて

5

ここでの問題は、集計関数が含まれていない列の値が、グループの最初の行が処理されたときに計算され、集計値が計算されるときに割り当て@var:=SUMが発生することです。

これは、他のコンテキストで集約関数を繰り返す必要があるか、集約関数が複雑で、繰り返したくない場合です:a)すべてをサブクエリに入れ、b)次のようにしますIF(COUNT(*), @var, @var)(これはむしろハッキーに見えます)

PS列名がバッククォートで引用されるため、クエリが無効であるように見えます。

関連する問題