【问题标题】:Count distinct values separated by a comma计算以逗号分隔的不同值
【发布时间】:2021-09-04 17:24:23
【问题描述】:

我有这张表叫test

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

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

  • id=1 将有 3 不同的值
  • id=2 将有 2 不同的值作为 bb//43 显示两次,因此有 2 个不同的值
  • id=3 将具有 0 不同的值,因为它是一个空列表
  • id=4 将有 1,因为列表中只有 1 项

我想在纯 SQL 中执行此操作,而不是使用自定义过程。我尝试使用下面的语句,但显示为 1。

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

预期结果:

id my_count
1 3
2 2
3 0
4 1

【问题讨论】:

标签: sql database oracle count distinct


【解决方案1】:

你需要把你的列表变成表格到里面的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
身份证 |碳纳米管 -: | --: 1 | 3 2 | 2 3 | 0 4 | 1

db小提琴here

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-26
    • 2013-04-15
    • 2017-06-22
    • 1970-01-01
    相关资源
    最近更新 更多