计算一个表中的不同行

use*_*878 2 mysql sql

我有桌子t1:

id|id_title|action
Run Code Online (Sandbox Code Playgroud)

表中的数据:

1|1|like
2|1|like
3|1|unlike
4|2|share
5|2|share
Run Code Online (Sandbox Code Playgroud)

所以我想从查询中获得下一个结果:

id|count like|count unlike|count share

1|2|1|0
2|0|0|2
Run Code Online (Sandbox Code Playgroud)

我尝试使用下一个查询:

SELECT id_title, ( Select Count(id) From T1 WHERE action='like') As CountOfItems FROM T1 GROUP BY id_title
Run Code Online (Sandbox Code Playgroud)

但它总是返回第一行的数量.我应该做什么?或许我必须改变表的结构?

Vam*_*ala 6

只需使用条件聚合.

select
id_title
,sum(case when action='like' then 1 else 0 end) As Count_Like
,sum(case when action='unlike' then 1 else 0 end) As Count_Unlike
,sum(case when action='share' then 1 else 0 end) As Count_Share
FROM T1 
GROUP BY id_title
Run Code Online (Sandbox Code Playgroud)