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

तालिका में शब्दों की गिनती पाने के लिए SQL क्वेरी

मान लें कि आपकी तालिका का नाम temp है (शायद नहीं - इसे अपनी तालिका के सही नाम में बदलें)

मैंने आपकी तालिका में सभी शब्दों को खोजने के लिए एक सबक्वेरी का उपयोग किया:

select distinct regexp_substr(t.name, '[^ ]+',1,level) word , t.name, t.id
     from temp t
     connect by level <= regexp_count(t.name, ' ') + 1

यह क्वेरी सभी शब्दों को सभी रिकॉर्ड से विभाजित करती है। मैंने इसे words का उपनाम दिया है .
फिर मैंने इसे आपकी तालिका के साथ जोड़ दिया (क्वेरी में इसे अस्थायी कहा जाता है) और प्रत्येक रिकॉर्ड में घटनाओं की संख्या की गणना की।

select words.word, count(regexp_count(tt.name, words.word))
from(
select distinct regexp_substr(t.name, '[^ ]+',1,level) word , t.name, t.id
 from temp t
 connect by level <= regexp_count(t.name, ' ') + 1) words, temp tt
 where words.id= tt.id
 group by words.word

आप यह भी जोड़ सकते हैं:

having count(regexp_count(tt.name, words.word)) > 1

अपडेट करें :बेहतर प्रदर्शन के लिए हम पाइपलाइन किए गए फ़ंक्शन के परिणामों के साथ आंतरिक सबक्वेरी को बदल सकते हैं:
पहले, एक स्कीमा प्रकार और इसकी एक तालिका बनाएं:

create or replace type t is object(word varchar2(100), pk number);
/
create or replace type t_tab as table of t;
/

फिर फ़ंक्शन बनाएं:

create or replace function split_string(del in varchar2) return t_tab
  pipelined is

  word    varchar2(4000);
  str_t   varchar2(4000) ;
  v_del_i number;
  iid     number;

  cursor c is
    select * from temp; -- change  to your table

begin

  for r in c loop
    str_t := r.name;
    iid   := r.id;

    while str_t is not null loop

      v_del_i := instr(str_t, del, 1, 1);

      if v_del_i = 0 then
        word  := str_t;
        str_t := '';
      else
        word  := substr(str_t, 1, v_del_i - 1);
        str_t := substr(str_t, v_del_i + 1);
      end if;

      pipe row(t(word, iid));

    end loop;

  end loop;

  return;
end split_string;

अब क्वेरी इस तरह दिखनी चाहिए:

select words.word, count(regexp_count(tt.name, words.word))
from(
select word, pk as id from table(split_string(' '))) words, temp tt
 where words.id= tt.id
 group by words.word



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. आर से सीएलओबी कॉलम (ओरेकल) में 8k कॉलम मान को धक्का देने में मदद चाहिए

  2. ओरेकल एसक्यूएल में जहां स्थिति की गतिशील संख्या

  3. Oracle से SQL सर्वर में एक छवि सम्मिलित करना

  4. Oracle में प्रविष्टि के बाद पहचान कॉलम का मान लौटाना

  5. TO_TIMESTAMP_TZ() Oracle में फ़ंक्शन