赞
踩
统计近一周每天的销售额
select date_format(create_at,'%Y-%m-%d') as 'date', IFNULL(SUM(amount),0) as 'dayAmount'
from order_pay_trace
where create_at >= date(now()) - interval 6 day
group by day(create_at);
统计近三个月每个月的销售额
这里在限制条件处先获得四个月的数据,因为最前面的月份不是满月的销售额,故舍去
select month(create_at) as 'month', IFNULL(SUM(amount),0) as 'monthAmount'
from order_pay_trace
where create_at >= date(now()) - interval 3 month AND date_format(create_at,'%Y-%m') <> date_format(date(now()) - interval 3 month,'%Y-%m')
group by month(create_at);
统计指定月份的销售额(此处以统计当前日期前一个月的销售额为例)
select date_format(date(now()) - interval 1 month,'%Y-%m') as 月份,IFNULL(SUM(amount),0) as 销售额
from order_orders
where date_format(create_at,'%Y-%m') = date_format(date(now()) - interval 1 month,'%Y-%m')
注意:上述sql语句也有一些bug,比方说如果使用第一条sql语句来查询当前时间内近七天的每天的销售额,因为group by分组是按照day(create_at)的日期来分的,若其中某一天没有创建订单,自然也不会有create_at,这样查出来的数据就会缺失这一天的销售额数据。
解决方案:在java代码中新建一个List<Map<String, Object>> newMapList = new ArrayList<>();集合,然后用java代码获取当前日期及其当前日期近一周内的所有日期,用java代码获得的日期和从sql中查出来的日期循环对比,若sql查出来的日期存在,那么将sql查出来的销售额赋值,若不存在默认销售额为0,最后将java代码中查出来的近七天的日期和对应的销售额存入一个map集合中一起加入到list集合中即可。
List<Map<String, Object>> newMapList = new ArrayList<>(); //获得近七天的日期和对应日期的日销售额 List<Map<String, Object>> mapList = this.baseMapper.selectLastSevenDaysAmount(); //处理日销售额格式 分转元 for (Map<String, Object> map : mapList) { BigDecimal dayAmount = (BigDecimal) map.get("dayAmount"); Integer intAmount = dayAmount.intValue(); map.put("dayAmount", MoneyUtils.changeF2YDouble(intAmount)); } //此处为了处理数据缺失导致的问题,比如某一天没有订单创建,那么sql语句中按照日期分组后就没有该日期这一组,自然也会缺失这一天的销售额 for (int i = 0; i < 7; i++) { HashMap<String, Object> newMap = new HashMap<>(); //获得近七天的日期date SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd"); Calendar calendar = new GregorianCalendar(); calendar.setTime(new Date()); calendar.add(Calendar.DATE,-i); String date= sdf.format(calendar.getTime()); Double dayAmount = 0.0; //将获得的日期和从数据库查询的日期作比较,若存才则将数据库得到的销售额赋值,若不存在则默认该天销售额为0.0 for (Map<String, Object> map : mapList) { if (date.equals(map.get("date"))) { dayAmount = (Double) map.get("dayAmount"); } } newMap.put("date", date); newMap.put("dayAmount", dayAmount); newMapList.add(newMap); } return newMapList; }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。