Mysql 编号状态的条件放弃

Mysql 编号状态的条件放弃,mysql,sql,database,group-by,pivot,Mysql,Sql,Database,Group By,Pivot,我很难在SQL查询上绞尽脑汁。我认为某种程度上可以使用条件否定,但我的情况如下: 我有下表: +------------+----------+--------------+-------------+------------------+ | Email_Name | Email_Id | Subject_Line | Customer_Id | Interaction_Type | +------------+----------+--------------+-------------+-

我很难在SQL查询上绞尽脑汁。我认为某种程度上可以使用条件否定,但我的情况如下:

我有下表:

+------------+----------+--------------+-------------+------------------+
| Email_Name | Email_Id | Subject_Line | Customer_Id | Interaction_Type |
+------------+----------+--------------+-------------+------------------+
| Email1     |        1 | Hello_1      |           1 | SENT             |
| Email2     |        1 | Hello_1      |           2 | SENT             |
| Email3     |        1 | Hello_1      |           3 | OPEN             |
| Email4     |        1 | Hello_1      |           4 | OPEN             |
| Email5     |        1 | Hello_1      |           5 | CLICK            |
| Email6     |        1 | Hello_1      |           6 | SENT             |
+------------+----------+--------------+-------------+------------------+
通常,输入数据按客户ID排序,例如,发送给100人的电子邮件将显示100次(每个客户ID)。若50封电子邮件被打开,我将有一个额外的50行电子邮件和开放状态等

我想做的是聚合数据,这样每个电子邮件ID都有一行,后面有3列“打开/发送/单击”,数字表示发送/打开/单击的次数


能做到吗?使用MySql。非常感谢。

条件聚合:

select email_id, 
       sum(Interaction_Type = 'SENT') as num_sent,
       sum(Interaction_Type = 'OPEN') as num_open,
       sum(Interaction_Type = 'CLICK') as num_click
from t
group by email_id;

您确实需要条件聚合

这是通过将数据集按
email\u name
分组,然后对每个
交互类型执行有条件的
sum
s,如下所示:

select 
    email_name,
    sum(interaction_type = 'SENT') sent,
    sum(interaction_type = 'OPEN') open,
    sum(interaction_type = 'CLICK') click
from mytable
group by email_name

在MySQL中,条件表达式在数值上下文中求值时,在满足时产生
1
,在不满足时产生
0
。所以像
sum(interaction\u type='SENT')
这样的表达式对于
interaction\u type='SENT'

为mysql 8.0的每个记录增加
1
!令人惊叹的!非常感谢你!与上面的答案相似,但非常感谢您的解释。你太棒了!