How can I group by and count the values separated by double quotes between the brackets? I have 400K rows, so I’m also concerned about performance.
x
["853","1800"]
["852","1500"]
["833","1800"]
["857","1820"]
["23468","3184"]
..
Desired output:
Value Count
23468 1212
09692 987
Advertisement
Answer
Do you mean something like this? (The with
clause is only for testing – remove it, and use your actual table and column names in the main query.)
with
sample_data (j_arr) as (
select '["853","1800"]' from dual union all
select '["852","1500"]' from dual union all
select '["833","1800"]' from dual union all
select '["857","1820"]' from dual union all
select '["23468","3184"]' from dual union all
select '["013", "013", "013"]' from dual
)
select str, count(*) as ct
from sample_data cross apply json_table(j_arr, '$[*]' columns str path '$')
group by str
order by ct desc, str -- or whatever you need
;
STR CT
-------- ---
013 3
1800 2
1500 1
1820 1
23468 1
3184 1
833 1
852 1
853 1
857 1
I am sorry, but I have no clue what “register” means in this context. If you mean that you have 400K rows, I can’t see how performance would be an issue. A quick test on my system (with 402K rows) took about 0.33 seconds.