Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

SQL Query untuk mendapatkan jumlah kata dalam tabel

Dengan asumsi tabel Anda bernama temp (mungkin tidak - ubah ke nama kanan tabel Anda)

Saya menggunakan subquery untuk menemukan semua kata di tabel Anda:

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

kueri ini membagi semua kata dari semua catatan. Saya menyebutnya words .
Lalu saya menggabungkannya dengan tabel Anda (dalam kueri disebut temp) dan menghitung jumlah kemunculan di setiap record.

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

Anda juga dapat menambahkan:

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

perbarui :untuk performa yang lebih baik kita bisa mengganti inner subquery dengan hasil fungsi pipelined:
pertama, buat tipe skema dan tabelnya:

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

lalu buat fungsi:

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;

sekarang kueri akan terlihat seperti:

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. Membuat pemicu untuk hanya berjalan ketika tabel baru sedang dibuat

  2. Masalah koneksi Hikaricp Oracle

  3. Bagaimana cara menghasilkan Dynamic Order by klausa dalam prosedur PL/SQL?

  4. saya tidak dapat menemukan petunjuk tentang 'Pengembang Oracle SQL' dan 'Oracle Database 12c' di dalam shell Linux

  5. Bagaimana cara menyimpan file TIFF di Oracle?