项目场景:
mysql 5.7以上 case when 和group by冲突问题描述:
查询 select @@sql_mode; 得知为 ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION:第一个为 ONLY_FULL_GROUP_BY ,即select的列都要在group中,或者本身是聚合列(SUM,AVG,MAX,MIN) 才行。
解决方案:
使用函数:any_value 包住
select COUNT(*) as num,sum(zzj) as total,any_value(case left(flh, 2)
when '01' then '房屋及构筑物'
when '02' then '土地及植物'
when '03' then '仪器仪表'
when '04' then '机电设备'
when '05' then '电子设备'
when '06' then '印刷机械'
when '07' then '卫生医疗器械'
when '08' then '文体设备'
when '09' then '标本模型'
when '10' then '文物及陈列'
when '11' then '图书'
when '12' then '工具、量具和器皿'
when '13' then '家具'
when '14' then '行政办公设备'
when '15' then '被服装具'
else '其他' end) name from ttt_info GROUP BY left(flh, 2)