Oracle
 sql >> डेटाबेस >  >> RDS >> Oracle

स्तंभ योग मान के आधार पर समूह पंक्तियाँ

मैं व्यक्तिगत रूप से इस कार्य के लिए pl/sql फ़ंक्शन को प्राथमिकता दूंगा, लेकिन यदि आप इसे शुद्ध sql में करना चाहते हैं तो आप निम्न क्वेरी का उपयोग कर सकते हैं:

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
/

ध्यान दें कि यह क्वेरी समूह बनाने के लिए मेल खाने वाली प्रविष्टियों की खोज नहीं करती है जैसे कि योग <500 है क्योंकि यह तथाकथित knapsack समस्या से निकटता से संबंधित है (s. https://en.wikipedia.org/wiki/Knapsack_problem ), जिसे हल करना आसान नहीं है...



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Oracle SQL क्वेरी में नवीनतम का चयन करें

  2. टेबलस्पेस के साथ Oracle निर्यात/आयात मुद्दे

  3. दो तालिकाओं से एक दृश्य में डेटा

  4. JDBC से 2 टेबल में लॉग आईडी डालने के लिए Oracle अनुक्रम का उपयोग करना?

  5. क्या Oracle का ORA_HASH यादृच्छिक है?