Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

Nhóm các hàng dựa trên giá trị tổng của cột

Cá nhân tôi thích một hàm pl / sql cho tác vụ này, nhưng nếu bạn muốn thực hiện nó bằng sql thuần túy, bạn có thể sử dụng truy vấn sau:

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
/

Lưu ý rằng truy vấn này không tìm kiếm các mục nhập phù hợp để xây dựng nhóm sao cho tổng là <500 vì điều này có liên quan chặt chẽ đến cái gọi là vấn đề túi knapsack (s. https://en.wikipedia.org/wiki/Knapsack_problem ), tất cả nhưng dễ giải quyết ...



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Thay đổi kiểu dữ liệu của một cột, được tham chiếu bởi các bảng khác

  2. Kết nối với DB oracle thông qua C

  3. Cách biên dịch các tệp nguồn bổ sung trong cmake sau quá trình xây dựng

  4. Cách tạo sơ đồ mối quan hệ thực thể (ER) bằng Oracle SQL Developer

  5. Kết nối với Oracle qua TNS không hoạt động