计算以逗号分隔的不同值

Count distinct values separated by a comma

我有这个 table 叫做 test

id my_list
1 aa//11,aa//34,ab//65
2 bb//43, bb//43, be//54
3
4 cc//76

我想计算 my_list 中的不同值,其中列表中的每个项目都用逗号分隔。在这种情况下:

我想在 SQL 中完成此操作,而不是使用自定义程序。我尝试使用下面的语句,但它显示 1.

SELECT id, COUNT(DISTINCT my_list) as my_count
FROM test;

预期结果:

id my_count
1 3
2 2
3 0
4 1

你需要把你的列表变成table到count distinct里面。以json_table为例。

with a(id, my_list) as (
  select 1, 'aa//11, aa//34, ab//65' from dual union all
  select 2, 'bb//43, bb//43, be//54' from dual union all
  select 3, null from dual union all
  select 4, 'cc//76' from dual
)
select
  id
  , (
      select count(distinct val)
      from json_table(
        /*Replace comma with quotes and comma: ','
          And wrap with array brackets
        */
        '[''' || regexp_replace(my_list, '\s*,\s*', ''',''') || ''']'
        , '$[*]'
        columns ( val varchar(20) path '$')
      )
    ) as cnt
from a
ID | CNT
-: | --:
 1 |   3
 2 |   2
 3 |   0
 4 |   1

db<>fiddle here