【发布时间】: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 |
【问题讨论】:
-
规范化你的架构。见"Is storing a delimited list in a database column really that bad?"(剧透:是的。)。
标签: sql database oracle count distinct