获取逗号分隔的值的计数

8ulbf1ek  于 2021-08-01  发布在  Java
关注(0)|答案(1)|浏览(343)

这个问题在这里已经有答案了

在mysql字段中存储csv–坏主意(2个答案)
10个月前关门了。
我在sql中有一个列,它是一个逗号分隔的列表(比如cats,dogs,cows),我只需要使用mysql来计算其中的猫,狗和牛的数量

id | Name
1  | dog,cat
2  | cow,cat
3  | dog,cat,cow
6kkfgxo0

6kkfgxo01#

您应该首先修复数据模型。你应该有一个单独的table来存放 id/name 关系,其中每个元组将存储在单独的行上,如:

id    name
----------
1     dog
1     cat
2     cow
2     cat
3     dog
3     cat
3     cow

这将使您的查询更加简单和高效。
从当前设置开始:如果值列表是固定的,则可以使用 find_in_set() 和条件聚合:

select
    sum(find_in_set('cat', name) > 0) no_cats
    sum(find_in_set('cow', name) > 0) no_cows,
    sum(find_in_set('dog', name) > 0) no_dogs
from mytable

相关问题