Rumah >pangkalan data >tutorial mysql >Bagaimanakah saya boleh melaksanakan SUM bersyarat dalam Oracle yang ditetapkan semula kepada sifar apabila jumlah berjalan melebihi 15?
SUM Bersyarat pada Oracle: Menetapkan Semula Apabila Nilai Melebihi 15
Dalam Oracle, anda mungkin menghadapi keperluan untuk melaksanakan jumlah kumulatif tetapi mengehadkannya kepada ambang maksimum. Sebagai contoh, anda mungkin ingin mengira jumlah berjalan yang ditetapkan semula kepada sifar apabila melebihi nilai 15. Ini dikenali sebagai SUM bersyarat.
Satu pendekatan untuk mencapai ini adalah melalui penggunaan SQL rekursif pertanyaan, yang membolehkan anda mengemas kini jumlah berjalan secara berulang berdasarkan syarat yang ditentukan. Walau bagaimanapun, kaedah alternatif melibatkan penggunaan klausa MODEL Oracle SQL.
Klausa MODEL SQL menawarkan penyelesaian yang lebih mudah dibaca, walaupun dengan sintaks yang lebih kompleks sedikit. Dengan mencipta model berdasarkan data input, anda boleh menentukan peraturan untuk mengawal cara jumlah larian dikira.
Untuk melaksanakan SUM bersyarat ini menggunakan klausa MODEL SQL:
Gunakan klausa RULES UPDATE untuk mentakrifkan peraturan pengiraan:
Output pertanyaan ini akan memberikan anda jumlah berjalan yang ditetapkan semula kepada sifar apabila melebihi 15.
Contoh:
<code class="sql">WITH test_data (sort_col, addend) AS ( SELECT 'A', 3 FROM DUAL UNION ALL SELECT 'B', 7 FROM DUAL UNION ALL SELECT 'C', 6 FROM DUAL UNION ALL SELECT 'D', 5 FROM DUAL UNION ALL SELECT 'E', 9 FROM DUAL UNION ALL SELECT 'F', 3 FROM DUAL UNION ALL SELECT 'G', 8 FROM DUAL ), sorted_inputs (sort_col, sort_order, addend, running_sum_max_15) AS ( SELECT sort_col, row_number() OVER (ORDER BY sort_col) sort_order, addend, 0 FROM test_data ) SELECT sort_col, addend, running_sum_max_15 FROM sorted_inputs MODEL DIMENSION BY (sort_order) MEASURES (sort_col, addend, running_sum_max_15) RULES UPDATE ( running_sum_max_15[1] = addend[1], running_sum_max_15[sort_order > 1] = CASE WHEN running_sum_max_15[CV(sort_order) - 1] < 15 THEN running_sum_max_15[CV(sort_order) - 1] ELSE 0 END + addend[CV(sort_order)] );</code>
Output:
+----------+--------+--------------------+ | SORT_COL | ADDEND | RUNNING_SUM_MAX_15 | +----------+--------+--------------------+ | A | 3 | 3 | | B | 7 | 10 | | C | 6 | 16 | | D | 5 | 5 | | E | 9 | 14 | | F | 3 | 17 | | G | 8 | 8 | +----------+--------+--------------------+
Atas ialah kandungan terperinci Bagaimanakah saya boleh melaksanakan SUM bersyarat dalam Oracle yang ditetapkan semula kepada sifar apabila jumlah berjalan melebihi 15?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!