使用groupby有多少种解决方案?

cld4siwp  于 2021-07-26  发布在  Java
关注(0)|答案(1)|浏览(346)

我有一张table:

create table mmm (day int, week int, sales_event int);
insert into mmm (day, week, sales_event) values (6,1,1), (7,1,1), (13,2,0), (14,2,1), (20,3,0), (21,3,0);

我想得到一个按周分组的结果集,显示两列。一个是周,另一个是销售活动。如果销售\事件在分组依据后包含1,则销售\事件为1,或销售\事件为0。
这是我的解决方案:

select week, if(max(sales_event) = 1, 1, 0) as sales_event
from mmm
group by week;

我想知道更多解决这个问题的方法。

kokeuurv

kokeuurv1#

你的解决办法就是走这条路。但是,我建议在聚合函数中移动条件表达式:

select week, max(sales_event = 1) as sales_event
from mmm
group by week;

这个查询不仅要短一点,而且可以正确处理 sales_event 值不是 0 或者 1 . 如果,对于给定的一周值 12 如果该列中存在,则您的查询将给出 0 在第二栏(自 max(sales_event) 会回来的 2 ),而你大概还想 1 (因为 1 在那一周有效)。

相关问题