SQLの勉強をしています。ウィンドウ関数を勉強していて腑に落ちないことがあったので質問させてください。例えばid date sales1 2022-09-02 80002 2022-07-31 50003 2022-11-15 30004 2022-10-20 4000このような表があったときにSELECTid,date,salesFROM daily_sales;を実行すると、上記の表の通りに表示されました。一方で、SELECTid,date,sales,SUM(sales) OVER (ORDER BY date) AS cumulative_salesFROM daily_sales;上記SQLを実行した結果がid date sales cumulative_sales1 2022-09-02 8000 130002 2022-07-31 5000 50003 2022-11-15 3000 200004 2022-10-20 4000 17000ではなく、id date sales cumulative_sales2 2022-07-31 5000 50001 2022-09-02 8000 130004 2022-10-20 4000 170003 2022-11-15 3000 20000のように表示の順番が変わったのですがなぜでしょうか?ウィンドウ関数で使うORDER BYは計算の順序を決めるだけで表示結果の並べ替えには影響を及ばさないという認識でした。にもかかわらず、日付順にソートされているのが理解できませんでした。よろしくお願いします。

1件の回答

回答を書く

1150612

2026-02-03 07:10

+ フォロー

RDBMSでは、SELECT文の最後のORDER BYを指定しない限り、結果を返す順序を保証していません。

「保証しない」とはどういうことかというと、内部処理の過程で物理順であったり何らかの列でソートされてたり、あるいは複数の処理の過程で意味のない順序になっても一切、関知しないということです。



Window関数を使ったら、たまたまその順で結果が返されたとしても、RDBMS側は何ら関知しないし、その順序が保証されることもありません。



順序保証したいなら、SELECT文でORDER BYを指定してください。

たまたま、「ORDER BYを指定していないのに、〇〇の順序になったのはどうして?」といった質問は意味がありません。

うったえる有益だ(0シェアするブックマークする

関連質問

Copyright © 2026 AQ188.com All Rights Reserved.

博識 著作権所有