mysql 中一行转多行问题

有这样表数据:

attachments-2016-12-8mY1xGlP5845e234351e

我想把它转换成这样的,order_num in (1,2) 的数据作为单独一列, order_num in (3,4) 的数据作为单独一列,

order_num in (5,6) 的数据作为单独一列,order_num>6 的数据作为单独一列。如下图:

attachments-2016-12-R6IHfdah5845e2afb317

这个功能实现可以使用聚合函数,如sum 在sum里面通过case when 来实现


select 

sum(case when (order_num=1 or order_num=2) THEN order_num else 0 END) as '1-2单'

,sum(case when (order_num=3 or order_num=4) THEN order_num else 0 END) as '3-4单'

,sum(case when (order_num=5 or order_num=6) THEN order_num else 0 END) as '5-6单'

,sum(case when (order_num>6) THEN order_num else 0 END) as '6单以上'

,total_num

,order_time

from tmp_rato group by  order_time


case when的用法中,when 是作为条件(一个简单或复杂的表达式)then 后面是判断的结果,也可以是表达式(一定使用括号括起来),但then后如果使用sum统计的话,结果有问题,原因没有找到。


如果是count聚合的话,因为when的提交是一个布尔值,count 统计结果当时满足条件的布尔值,此时就不要在使用else 等于0了,这样的话,count是统计的总数


请先 登录 后评论
  • 0 关注
  • 0 收藏,1147 浏览
  • 石天 提出于 2016-12-06 05:54

相似问题