閉まっている。この質問には詳細または明確さが必要です。現在回答を受け付けておりません。
この質問を改善したいですか?この投稿を編集して詳細を追加し、問題を明確にします。
3 年前
に閉鎖されました。この質問を改善してください
table values
------
100
50
100
50
<?php
$sth = $DB->prepare('
SELECT ( @runnningtotal := @runnningtotal + values) FROM table
');
$sth->execute();
print("All rows:\n");
$result = $sth->fetchAll();
print_r($result);
?>
私のコードの問題は何ですか? @runnningtotal が空の値を返すのはなぜですか?
------------------------
最初に変数を初期化する必要があります。これは、クエリを実行する前に SET コマンドを使用して行うことも、クエリ内で CROSS JOIN を使用して行うこともできます。
また、安定した結果を得るには、行を処理する順序を定義する列が必要です (クエリでは id として表しました)。サブクエリで値を事前に並べ替えることをお勧めします。最初に:
SELECT @runnningtotal := @runnningtotal + t.val as running_sum
FROM (SELECT val FROM mytable ORDER BY id) t
CROSS JOIN (SELECT @runnningtotal := 0) r
ユーザー変数iables は、将来の MySQL バージョンで非推奨になる予定です。一方、MySQL 8.0 ではウィンドウ関数が追加され、このタスクがはるかに簡単かつ効率的になりました。
SELECT SUM(val) OVER(ORDER BY id) running_sum
FROM mytable
1
あなたは私の命を救ってくれました、本当にありがとう。 CROSS JOIN (SELECT @runnningtotal := 0) x のみを追加しましたが、機能します。
– g770様
2020 年 9 月 4 日 20:53