现有一张订单表(包含price,time),需要按照时间范围对其中的price进行统计,如(范围一:8:00-12:00,范围二:12:00-18:00,范围三:18:00-22:00),
业务需求一:如果不存在任何查询条件,分别统计这三个时间段内,price的总和
业务需求二:查询某一天内这三个时间段的price的总和
订单表:order
字段price 类型double
字段time 类型 datetime
显示结果:
范围一 500
范围二 400
范围三 300
数据库为mysql
请大神指教,SQL怎么写?
建议sql中最好不要参夹业务逻辑, 所以不要想着一条sql语句搞定(虽然一条也可以,但不利于维护);
推荐: 一条统计sql , 不同的执行方式; 毕竟也就是两种条件,要么有where ,要么没where , jbdcTemplate执行三次就可以;
在查询出来的价格叠加下,总和就出来了;
select sum(case when ((SUBSTR(time FROM 12 FOR 2)>8 and SUBSTR(time FROM 12 FOR 2) sum(case when ((SUBSTR(time FROM 12 FOR 2)>12 and SUBSTR(time FROM 12 FOR 2) sum(case when ((SUBSTR(time FROM 12 FOR 2)>18 and SUBSTR(time FROM 12 FOR 2)<22)) then price else 0 end) as price3
from order