sql - MySQL 累計が空の値を返す

okwaves2024-01-25  8

閉まっている。この質問には詳細または明確さが必要です。現在回答を受け付けておりません。

この質問を改善したいですか?この投稿を編集して詳細を追加し、問題を明確にします。

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

総合生活情報サイト - OKWAVES
総合生活情報サイト - OKWAVES
生活総合情報サイトokwaves(オールアバウト)。その道のプロ(専門家)が、日常生活をより豊かに快適にするノウハウから業界の最新動向、読み物コラムまで、多彩なコンテンツを発信。