MYSQL计数对where语句不返回任何内容

MYSQL计数对where语句不返回任何内容,mysql,Mysql,我有一个表格: user_id | categories --------------------- 1 | ['apple','orange'] 2 | ['apple','banana'] 1 | ['apple','squash'] 3 | ['fig'] 我想总结一下每个用户的“苹果”数量: user_id | apple_count --------------------- 1 | 2 2 | 1 3

我有一个表格:

user_id |  categories
---------------------
   1    | ['apple','orange']
   2    | ['apple','banana']
   1    | ['apple','squash']
   3    | ['fig']
我想总结一下每个用户的“苹果”数量:

user_id |  apple_count
---------------------
   1    | 2
   2    | 1
   3    | 0
所以我想应该是这样的:

SELECT user_id, Count(categories) AS apple_count 
    FROM table 
       WHERE categories LIKE     
       '%apple%' 
       GROUP BY user_id;
不幸的是,它返回:

user_id |  apple_count
---------------------
   1    | 2
   2    | 1

我在想也许我可以解决这个问题,在所有唯一的用户id上使用左连接,然后在其上附加0?但是这样做的优雅方式是什么呢?

由于
的WHERE
条件,您无法获得最后一部分。使用
CASE
语句稍微更改您的查询,并将条件包含在聚合函数中,如下所示:

SELECT user_id, 
SUM(CASE WHEN categories LIKE '%apple%' THEN 1 ELSE 0 END) AS apple_count 
FROM table 
GROUP BY user_id;

谢谢你的回答!然而,Jpw的评论是一个更好的答案。您不应该将数组/列表存储在单列中。如果您可以选择更改数据库设计,则应该对其进行规范化,并为用户和类别之间的多对多关系添加连接表。这样您就不会遇到这样的查询,而且您还可以确保数据的完整性。