Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

Kelompokkan baris berdasarkan nilai jumlah kolom

Saya pribadi lebih suka fungsi pl/sql untuk tugas ini, tetapi jika Anda ingin melakukannya dalam sql murni, Anda dapat menggunakan kueri berikut:

WITH ord AS (SELECT id, num_rows, ROWNUM ord FROM myTable)
   , rek(ord, id, num_rows, sum_rows, groupId) AS 
         (SELECT ord, id, num_rows, num_rows, 1 FROM ord WHERE ord = 1
          UNION ALL
          SELECT rek.ord +1
               , ord.id
               , ord.num_rows
               , CASE WHEN rek.sum_rows + ord.num_rows > 500
                      THEN ord.num_rows
                      ELSE rek.num_rows + ord.num_rows
                END
               , CASE WHEN rek.sum_rows + ord.num_rows > 500
                      THEN rek.groupID + 1
                      ELSE rek.groupID
                 END
            FROM rek
            JOIN ORD
              ON ord.ord = rek.ord+1)
SELECT id, num_rows, groupid
  FROM rek
/

Perhatikan bahwa kueri ini tidak mencari entri yang cocok untuk membangun grup sehingga jumlahnya <500 karena ini terkait erat dengan apa yang disebut masalah ransel (s. https://en.wikipedia.org/wiki/Knapsack_problem ), yang sangat mudah untuk dipecahkan...



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Mengambil elemen XML dari XMLType Oracle

  2. Cara Mendaftarkan Database Pluggable (PDB) dengan LISTENER yang baru dibuat

  3. Ubah Angka menjadi Kata dalam Sistem Penomoran India

  4. Hitungan kumulatif Oracle menggunakan SYS_CONNECT_BY_PATH

  5. Fungsi ASIN() di Oracle