Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Melakukan SUM Bersyarat dalam Oracle dengan Ambang Tetapan Semula?
SUM Bersyarat dalam Oracle
Apabila bekerja dengan data berangka dalam Oracle, selalunya menjadi perlu untuk melakukan pengiraan bersyarat berdasarkan kriteria tertentu. Satu keperluan sedemikian adalah untuk melaksanakan operasi SUM, tetapi dengan syarat untuk menetapkan semula jumlah selepas ia melebihi ambang tertentu.
Masalah:
Pertimbangkan jadual data berikut :
A | B |
---|---|
3 | 7 |
7 | 10 |
6 | 16 |
5 | 5 |
9 | 14 |
3 | 17 |
8 | 8 |
Objektifnya adalah untuk melaksanakan operasi SUM pada lajur 'B', tetapi tetapkan semula jumlah kepada sifar apabila ia melebihi nilai 15. Output yang diingini akan muncul sebagai:
A | B | Sum |
---|---|---|
3 | 3 | 3 |
7 | 10 | 10 |
6 | 16 | 16 |
5 | 5 | 5 |
9 | 14 | 14 |
3 | 17 | 17 |
8 | 8 | 8 |
Penyelesaian 1: SQL Rekursif
WITH recursive_sums AS ( SELECT A, B, B AS SUM_VALUE FROM data_table UNION ALL SELECT A, B, CASE WHEN SUM_VALUE + B < 15 THEN SUM_VALUE + B ELSE 0 END AS SUM_VALUE FROM recursive_sums WHERE A < (SELECT MAX(A) FROM data_table) ) SELECT A, B, SUM_VALUE AS Sum FROM recursive_sums ORDER BY A;
Penyelesaian 2: Klausa MODEL SQL
WITH sorted_inputs AS ( SELECT A, ROW_NUMBER() OVER (ORDER BY A) AS sort_order, B, 0 AS running_sum_max_15 FROM data_table ), sorted_results AS ( SELECT A, B, running_sum_max_15 FROM sorted_inputs MODEL DIMENSION BY (sort_order) MEASURES (A, B, running_sum_max_15) RULES UPDATE ( running_sum_max_15[1] = B[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 + B[CV(sort_order)] ) ) SELECT A, B, running_sum_max_15 AS Sum FROM sorted_results ORDER BY A;
Kedua-dua penyelesaian ini berkesan operasi SUM bersyarat, menetapkan semula jumlah kepada sifar apabila ia melebihi ambang 15.
Atas ialah kandungan terperinci Bagaimana untuk Melakukan SUM Bersyarat dalam Oracle dengan Ambang Tetapan Semula?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!