Mysql 计算包含特定字符串和聚合的行数

Mysql 计算包含特定字符串和聚合的行数,mysql,sql,Mysql,Sql,我的数据库中有以下一组行: USER | ACTIVITY 'User1' | 'User1 liked FeatureX' 'User1' | 'User1 liked FeatureY' 'User2' | 'User2 followed FeatureX' 我想运行执行以下操作的查询: select User, count(Activity like '%liked%') as LikedActivity, count(Activity like

我的数据库中有以下一组行:

 USER   |  ACTIVITY
'User1' | 'User1 liked FeatureX'
'User1' | 'User1 liked FeatureY'
'User2' | 'User2 followed FeatureX'
我想运行执行以下操作的查询:

select User, 
       count(Activity like '%liked%') as LikedActivity, 
       count(Activity like '%followed%') as FollowedActivity
from db.Table 
group by USER

换句话说:我想为每个用户检索“功能喜欢”和“功能跟随”的数量。

在这里使用
SUM
CASE
表达式:

SELECT
    User, 
    SUM(CASE WHEN Activity LIKE '%liked%'    THEN 1 ELSE 0 END) AS LikedActivity, 
    SUM(CASE WHEN Activity LIKE '%followed%' THEN 1 ELSE 0 END) AS FollowedActivity
FROM db.Table 
GROUP BY User;
我们也可以在这里使用
COUNT
,这将导致一个更整洁的查询:

SELECT
    User, 
    COUNT(CASE WHEN Activity LIKE '%liked%'    THEN 1 END) AS LikedActivity, 
    COUNT(CASE WHEN Activity LIKE '%followed%' THEN 1 END) AS FollowedActivity
FROM db.Table 
GROUP BY User;

啊,我明白了!!非常好,谢谢!两者之间有什么性能差异吗?@Gio我认为两者的性能差异很小。您可以对两个查询运行
EXPLAIN
,以查看差异。