获取以逗号分隔的值的数量

get count number of values with comma seprated

我在 SQL 中有一列,它是一个逗号分隔的列表(即猫、狗、奶牛,)我只需要使用 [=13= 来计算其中的猫、狗和奶牛的数量]

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

您首先应该努力修复数据模型。您应该有一个单独的 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