我有一张桌子:
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);
我想得到一个按周分组的结果集,其中显示两列。一个是星期,另一个是sales_event。如果sales_event在分组依据之后包括1,则sales_event为1,或sales_event为0。
这是我的解决方案:
select week, if(max(sales_event) = 1, 1, 0) as sales_event
from mmm
group by week;
我想知道这个问题的更多解决方案。
您的解决方案就是前往此处的方式。但是,我建议在聚合函数中移动条件表达式:
select week, max(sales_event = 1) as sales_event
from mmm
group by week;
该查询不仅缩短了查询时间,而且还可以正确处理sales_event
值不是0
或的情况1
。如果对于给定的星期值1
并且 2
该列中存在该值,那么您的查询将0
在第二列中给出(因为max(sales_event)
将返回2
),而您大概仍然想要1
(因为1
该周可用)。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句