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

एक आंतरिक चयन खंड और रोलअप द्वारा समूह के साथ एसक्यूएल आदेश

आप ऐसा कुछ कर सकते हैं। मेरे पास आपका इनपुट डेटा नहीं है, इसलिए मैंने SCOTT.EMP . का इस्तेमाल किया इसके बजाय।

कुछ बातों पर ध्यान दें। मैंने JOB . द्वारा समूहीकृत किया , और मैंने GROUPING(JOB) . का उपयोग किया दोनों SELECT . में (लेबल जोड़ने के लिए TOTAL सारांश पंक्ति के लिए) और ORDER BY . में . चूंकि मैं कॉलम नाम JOB . का पुन:उपयोग करता हूं में SELECT (आउटपुट कॉलम के लिए), ORDER BY . में मुझे कॉलम नाम JOB . को क्वालिफाई करने में सावधानी बरतनी चाहिए (यह स्पष्ट करने के लिए मैं इनपुट टेबल कॉलम की बात कर रहा हूं, न कि SELECT . के कॉलम की - जो डिफ़ॉल्ट होगा यदि ORDER BY . में कॉलम नाम योग्य नहीं थे)। ORDER BY . में कॉलम नामों को अर्हता प्राप्त करने की आवश्यकता है , फिर, मुझे FROM . में तालिका को अन्य नाम देने के लिए मजबूर किया क्लॉज (अन्यथा मुझे टेबल का पूरा नाम हर जगह रखना पड़ता)।

GROUPING का उपयोग करना SELECT में कार्य करें (NVL के बजाय ) विशेष रूप से महत्वपूर्ण है यदि JOB nullहो सकता है . आप नहीं चाहते कि समूह null . के लिए हो TOTAL labeled लेबल किया जाने वाला कार्य - आप केवल यही चाहते हैं कि रोलअप पंक्ति के लिए। यह बिंदु बहुत सारे उन्नत प्रोग्रामर को भी भ्रमित करता है।

मैं दिखाता हूं कि आप कैसे "मैन्युअल रूप से" आदेश तय कर सकते हैं:PRESIDENT पहले, फिर MANAGER , और फिर अन्य सभी कार्य (वर्णानुक्रम में क्रमित)। यदि आपके पास प्राथमिकता का क्रम कहीं सहेजा गया है, उदाहरण के लिए किसी तालिका में, तो आप उस तालिका में शामिल हो सकते हैं और "मैनुअल" CASE के बजाय ऑर्डरिंग कॉलम का उपयोग कर सकते हैं मेरी क्वेरी में अभिव्यक्ति।

select case grouping(job) when 0 then job else 'TOTAL' end as job
     , sum(sal) as total_salary
from   scott.emp e
group  by rollup(job)
order  by grouping(e.job)       -- to get the total in the last row
        , case e.job when 'PRESIDENT' then 1 when 'MANAGER' then 2 end
        , e.job
;

JOB       TOTAL_SALARY
--------- ------------
PRESIDENT         5000
MANAGER           8275
ANALYST           6000
CLERK             4150
SALESMAN          5600
TOTAL            29025



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. एसक्यूएल लोडर, ट्रिगर संतृप्ति?

  2. डेटा डिक्शनरी से पैकेज वैश्विक चर खोजें

  3. INSERT STATEMENTS के रूप में निर्यात करें:लेकिन SQL Plus में लाइन 2500 वर्णों को ओवरराइड करती है!

  4. कार्य या एक्सेल फ़ाइल के लिए BLOB के अंदर स्ट्रिंग ढूंढें और बदलें

  5. Oracle/SQL - अनुक्रमिक रिकॉर्ड की निर्दिष्ट श्रेणी का चयन करें