Mysqlgroupbysubstr()报错问题

image.png如图,mysql数据集上有create_time字段格式为“2021-03-10”,分组grou by需要转“202103”格式,但是mysql报错,请问怎么实现我想要的效果。

原sql语句:

-- 累计授权

select 

concat(substr(a.create_time,1,4),substr(a.create_time,6,2)) ny,

count(distinct a.account) sq,

0 jh

from dwd_it_user_role_menu_detail_c a

group by concat(substr(a.create_time,1,4),substr(a.create_time,6,2))

错误,

调整为:

-- 累计授权

select 

concat(substr(a.create_time,1,4),substr(a.create_time,6,2)) ny,

count(distinct a.account) sq,

0 jh

from dwd_it_user_role_menu_detail_c a

group by a.create_time

就执行成功,但是不是我想要的结果,我想要的是group by 年月格式,而不是年月日格式

luozhiwei 发布于 2021-3-10 10:38 (编辑于 2021-3-10 10:59)
1min目标场景问卷 立即参与
回答问题
悬赏:3 F币 + 添加悬赏
提示:增加悬赏、完善问题、追问等操作,可使您的问题被置顶,并向所有关注者发送通知
共4回答
最佳回答
0
zsh331Lv8专家互助
发布于2021-3-10 10:45

关于Mysql5.7.x版本关于only_full_group_by报错的解决方案- https://help.finereport.com/finereport9.0/doc-view-1988.html

_____

  • luozhiwei luozhiwei(提问者) 生产环境不能随便修改mysql配置。。
    2021-03-10 10:49 
  • zsh331 zsh331 回复 luozhiwei(提问者) 其实发生这个问题的原因就是SQL语法不符合正常逻辑;【select 字段中,有非分组字段,且没有采用聚合函数】处理导致的报错,理解下这句话的意思!
    2021-03-10 10:53 
  • luozhiwei luozhiwei(提问者) 回复 zsh331 select 中有count()聚合函数的
    2021-03-10 10:57 
  • luozhiwei luozhiwei(提问者) 回复 zsh331 我好像知道问题在哪了,因为我还有个自定义的字段 0 jh,没有给0 聚合函数
    2021-03-10 11:00 
  • zsh331 zsh331 回复 luozhiwei(提问者) binggo~
    2021-03-10 11:04 
最佳回答
0
ScyalcireLv7中级互助
发布于2021-3-10 10:41(编辑于 2021-3-10 10:52)

把【concat(substr(a.create_time,1,4),substr(a.create_time,6,2)) else '' end】作为一个新字段直接加在select字段后面       然后把这段sql放在group by后面   

select  concat(substr(a.create_time,1,4),substr(a.create_time,6,2)) ny, count(distinct a.account) sq from dwd_it_user_role_menu_detail_c a group by concat(substr(a.create_time,1,4),substr(a.create_time,6,2))

  • luozhiwei luozhiwei(提问者) 大佬,已补充内容,我前后都用到concat(substr(a.create_time,1,4),substr(a.create_time,6,2)),但是还是执行错误
    2021-03-10 10:52 
  • Scyalcire Scyalcire 回复 luozhiwei(提问者) 你select后面是两个字段,一个是用于count的,一个是substr字段的 你需要把substr那个sql原样放在group by后面才可以
    2021-03-10 10:54 
最佳回答
0
krystal033Lv7高级互助
发布于2021-3-10 10:42

整句

最佳回答
0
snrtuemcLv8专家互助
发布于2021-3-10 10:44(编辑于 2021-3-10 10:55)

直接嵌套试一下

select ny,count(account) sq from

(select concat(substr(a.create_time,1,4),substr(a.create_time,6,2)) ny,distinct a.account from dwd_it_user_role_menu_detail_c a)

group by ny

  • luozhiwei luozhiwei(提问者) 大佬,我就是这样写的,但是mysql还是会报错
    2021-03-10 10:55 
  • 5关注人数
  • 390浏览人数
  • 最后回答于:2021-3-10 10:59
    请选择关闭问题的原因
    确定 取消
    返回顶部