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

प्रति मान कुल मिलाकर अद्वितीय रिकॉर्ड की संख्या प्राप्त करें

मैंने परीक्षण के लिए तालिका बनाई:

create table nr_pvo_120 (
   otherid,
   fax
)
as
select 12365092    , 2762364204 from dual union all
select 12005656    , 2762364204 from dual union all
select 12484936    , 2762364204 from dual union all
select 39003042    , 2762364204 from dual union all
select 12365597    , 2762364204 from dual union all
select 12635922    , 2762364204 from dual union all
select 12332346    , 2762364204 from dual union all
select 12365092    , 4387267572 from dual union all
select 12005656    , 4387267572 from dual union all
select 12365092    , 4422911281 from dual union all
select 12005656    , 4422911281 from dual union all
select 12484936    , 4422911281 from dual union all
select 12651239    , 4422911281 from dual union all
select 12388710    , 4422911281 from dual union all
select 12686953    , 4422911281 from dual union all
select 12365092    , 4423311213 from dual union all
select 12005656    , 4423311213 from dual union all
select 12709544    , 4423311213 from dual union all
select 12484936    , 4423311213 from dual union all
select 12005656    , 4424450542 from dual union all
select 12346839    , 4424450542 from dual union all
select 12365120    , 4424450542 from dual union all
select 12484936    , 4424450542 from dual union all
select 12086512    , 4424450542 from dual
/

मेरा पहला शॉट होगा:प्रत्येक व्यक्ति (अन्य) के लिए उसका पहला . प्राप्त करें केवल फ़ैक्स नंबर और उसके बाद एक सामान्य समूह करें और उस पर भरोसा करें:

select first_fax, count(*) firstcount
  from (
   select otherid, min(fax) first_fax
     from nr_pvo_120
    group by otherid
       )
 group by first_fax
 order by first_fax
/

आउटपुट बन जाएगा:

 FIRST_FAX FIRSTCOUNT
---------- ----------
2762364204          7
4422911281          3
4423311213          1
4424450542          3

फिर मैंने देखा कि आपके वांछित आउटपुट में पाँचवाँ फ़ैक्स नंबर शामिल है लेकिन शून्य की गिनती के साथ। उदाहरण के लिए इसे इस तरह किया जा सकता है:

select fax, count(*) normalcount, count(otherid_on_first_fax) countunused
  from (
   select fax, otherid,
          case
             when fax = min(fax) over (partition by otherid order by fax)
             then otherid
          end otherid_on_first_fax
     from nr_pvo_120
       )
 group by fax
 order by fax
/

इस आउटपुट में, कॉलम NORMALCOUNT उस फैक्स वाले लोगों की संख्या है। कॉलम COUNTUNUSED उन लोगों की संख्या है जो पहले से ही "उपयोग" . नहीं किए गए हैं पिछली गिनती में:

       FAX NORMALCOUNT COUNTUNUSED
---------- ----------- -----------
2762364204           7           7
4387267572           2           0
4422911281           6           3
4423311213           4           1
4424450542           5           3

चाल यह है कि otherid_on_first_fax केवल otherid . का मान है व्यक्तियों पर पहले फैक्स नंबर, शेष व्यक्तियों के लिए फैक्स नंबर otherid_on_first_fax शून्य है। count(otherid_on_first_fax) फिर सभी गैर-शून्य मानों की गणना करता है, जिनमें से फैक्स 4387267572 के लिए कोई नहीं है।



  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 - कई दिनांक स्वरूपों को एकल स्वरूपित दिनांक में बदलें

  2. Oracle - शाब्दिक प्रारूप स्ट्रिंग त्रुटि से मेल नहीं खाता

  3. कहां क्लॉज में उपनाम का उपयोग कैसे करें?

  4. Oracle (Old?) Joins - रूपांतरण के लिए एक टूल/स्क्रिप्ट?

  5. ओरेकल में बड़ी मात्रा में डेटा के साथ एक ही तालिका में फ़ील्ड तुलना करने का सबसे तेज़ तरीका