Rumah > pangkalan data > tutorial mysql > Bagaimanakah saya boleh melaksanakan SUM bersyarat dalam Oracle yang ditetapkan semula kepada sifar apabila jumlah berjalan melebihi 15?

Bagaimanakah saya boleh melaksanakan SUM bersyarat dalam Oracle yang ditetapkan semula kepada sifar apabila jumlah berjalan melebihi 15?

DDD
Lepaskan: 2024-10-29 11:46:02
asal
574 orang telah melayarinya

How can I implement a conditional SUM in Oracle that resets to zero when the running total exceeds 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:

  1. Tentukan a CTE (Ungkapan Jadual Biasa) menamakan sorted_inputs untuk menentukan kedudukan data input dalam tertib menaik.
  2. Perkenalkan lajur bernama running_sum_max_15 untuk menjejaki jumlah larian, dimulakan kepada 0 untuk semua baris.
  3. Gunakan klausa RULES UPDATE untuk mentakrifkan peraturan pengiraan:

    • Untuk baris pertama, tetapkan running_sum_max_15 untuk menambah.
    • Untuk baris berikutnya, semak sama ada nilai running_sum_max_15 sebelumnya adalah kurang daripada 15. Jika benar, tambahkan tambahan semasa padanya; jika tidak, tetapkan semula kiraan kepada 0 dan tambahkan tambahan semasa.

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>
Salin selepas log masuk

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 |
+----------+--------+--------------------+
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan