mysql 的case when 和group by同时使用和按某字段固定顺序排序

select sum(a.num),a.period from
(select sum(visiting_num) num,
(case when (SUBSTRING(visiting_date,9,2)+0 <10) then '上旬'
when (SUBSTRING(visiting_date,9,2)+0 >= 20) then '下旬'
else '中旬' end)period
from t_vistor_register
where is_delete='0'
and SUBSTRING(visiting_date,1,7)=DATE_FORMAT(now(),'%Y-%m')
group by visiting_date)a
group by a.period
order by a.period

通过前嵌套查询可实现,如果写作

group by (case when (SUBSTRING(visiting_date,9,2)+0 <10) then '上旬' when (SUBSTRING(visiting_date,9,2)+0 >= 20) then '下旬' else '中旬' end)

在sql_mode=ONLY_FULL_GROUP_BY 时,亲测会报错

不止是case when ,对字段做过其他处理的道理相同,如:

select sum(a.num),a.period from
(select sum(visiting_num) num,
       date_format(str_to_date(visiting_date, '%Y-%m-%d'),'%W') period
from t_vistor_register where is_delete='0'
     and YEARWEEK(date_format(str_to_date(visiting_date, '%Y-%m-%d'),'%Y-%m-%d'),1)= YEARWEEK(now(),1)
     group by visiting_date)a
group by a.period
order by FIND_IN_SET(a.period,'Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday')

其中 order by FIND_IN_SET(a.period,'Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday') 便实现了按固定顺序排序,需要注意的是 字段 a.period不需要加引号(亲测),网上很多教程都加了引号会起不到排序的效果

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值