对于以下所有内容,我都使用了这张表:
create table tmp (
id INT auto_increment,
test VARCHAR(255),
PRIMARY KEY (id)
);
insert into tmp (test) values
("a,b"),
("b,c"),
("b,c,a"),
("d")
;
如果可能的值只有a,b,c,d,您可以尝试以下方法之一:
请注意,这仅在您没有像test 和test_new 这样相似的值时才有效,因为这样test 也将与所有test_new 行合并,并且计数将不匹配
select collection, COUNT(*) as count from tmp JOIN (
select CONCAT("%", tb.collection, "%") as like_collection, collection from (
select "a" COLLATE utf8_general_ci as collection
union select "b" COLLATE utf8_general_ci as collection
union select "c" COLLATE utf8_general_ci as collection
union select "d" COLLATE utf8_general_ci as collection
) tb
) tb1
ON tmp.test LIKE tb1.like_collection
GROUP BY tb1.collection;
这会给你想要的结果
collection | count
a | 2
b | 3
c | 2
d | 1
或者你可以试试这个
SELECT
(SELECT COUNT(*) FROM tmp WHERE test LIKE '%a%') as a_count,
(SELECT COUNT(*) FROM tmp WHERE test LIKE '%b%') as b_count,
(SELECT COUNT(*) FROM tmp WHERE test LIKE '%c%') as c_count,
(SELECT COUNT(*) FROM tmp WHERE test LIKE '%d%') as d_count
;
结果会是这样的
a_count | b_count | c_count | d_count
2 | 3 | 2 | 1