Mysql 编号状态的条件放弃
我很难在SQL查询上绞尽脑汁。我认为某种程度上可以使用条件否定,但我的情况如下: 我有下表:Mysql 编号状态的条件放弃,mysql,sql,database,group-by,pivot,Mysql,Sql,Database,Group By,Pivot,我很难在SQL查询上绞尽脑汁。我认为某种程度上可以使用条件否定,但我的情况如下: 我有下表: +------------+----------+--------------+-------------+------------------+ | Email_Name | Email_Id | Subject_Line | Customer_Id | Interaction_Type | +------------+----------+--------------+-------------+-
+------------+----------+--------------+-------------+------------------+
| 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
!令人惊叹的!非常感谢你!与上面的答案相似,但非常感谢您的解释。你太棒了!