Mysql统计每年每个月的数据(前端页面统计图实现)

    

  

    最终想实现的效果图,在这里就不多废话了,直接上效果图,由于测试数据有几个月是为0的,所以数据图看着会有点怪怪。

  接下来是数据库的两个表,这里直接给你们代码了,你们根据自己的需求更改即可

 -- 会员充值表
CREATE TABLE rechargeinfo(
r_num INT PRIMARY KEY COMMENT '充值编号',
v_card VARCHAR(12) COMMENT '会员卡号',
r_recharge DOUBLE COMMENT '充值金额',
r_payway VARCHAR(20) COMMENT '支付方式',
o_id INT COMMENT '操作员工编号',
r_time DATETIME COMMENT '交易时间',
r_remark VARCHAR(50) COMMENT '交易备注',
FOREIGN KEY (o_id) REFERENCES operatorinfo(o_id)
)ENGINE = InnoDB COMMENT '会员充值信息表';
alter table rechargeinfo change r_time r_time timestamp not null default NOW(); --停车登记表 CREATE TABLE parkinginfo(
p_num INT PRIMARY KEY COMMENT '停车编号',
c_carplate VARCHAR(20) NOT NULL COMMENT '车牌号',
p_card VARCHAR(20) COMMENT '停车牌号',
p_picture VARCHAR(50) COMMENT '进场拍摄图',
p_entrytime Date COMMENT '进场时间',
p_leavetime Date COMMENT '出场时间',
p_type VARCHAR(10) COMMENT '客户类型',
p_cost Double COMMENT '停车费用',
p_payway VARCHAR(20) COMMENT '支付方式',
v_card VARCHAR(12) COMMENT '会员卡号',
v_phone VARCHAR(12) COMMENT '临时客户手机号码',
p_condition VARCHAR(20) DEFAULT '正在停车中' COMMENT '状态',
p_remark VARCHAR(50) COMMENT '备注' )ENGINE = InnoDB COMMENT '停车信息表';
alter table parkinginfo change p_entrytime p_entrytime timestamp not null default NOW();

  接下来就是重点了:

    SQL语句,只需要传入一个参数(年份)即可, 这个是统计会员充值表的,另一张表同理

 select
sum(case month(r_time) when '' then r_recharge else 0 end) as Jan,
sum(case month(r_time) when '' then r_recharge else 0 end) as Feb,
sum(case month(r_time) when '' then r_recharge else 0 end) as Mar,
sum(case month(r_time) when '' then r_recharge else 0 end) as Apr,
sum(case month(r_time) when '' then r_recharge else 0 end) as May,
sum(case month(r_time) when '' then r_recharge else 0 end) as June,
sum(case month(r_time) when '' then r_recharge else 0 end) as July,
sum(case month(r_time) when '' then r_recharge else 0 end) as Aug,
sum(case month(r_time) when '' then r_recharge else 0 end) as Sept,
sum(case month(r_time) when '' then r_recharge else 0 end) as Oct,
sum(case month(r_time) when '' then r_recharge else 0 end) as Nov,
sum(case month(r_time) when '' then r_recharge else 0 end) as Dece
from rechargeinfo
where year(r_time)='';

   效果图:可以看到,每个月的数据已经查出来了

   

   接下来给出的是Dao层代码,service层就不写了,是个程序员,dao层知道,service都会写

import java.util.Map;

public interface TotalDao {

    Map<String,Double> getRechargeTotal(String toyear);

    Map<String,Double> getParkingTotal(String toyear);
}

  

    以及Mapper文件代码:注意,这里的结果类型一定要是java.util.LinkedHashMap, 如果是HashMap,是不会报错,但是顺序会乱,So,,你懂得。


  

<!--    统计充值-->
<select id="getRechargeTotal" parameterType="String" resultType="java.util.LinkedHashMap">
select
sum(case month(r_time) when '1' then r_recharge else 0 end) as Jan,
sum(case month(r_time) when '2' then r_recharge else 0 end) as Feb,
sum(case month(r_time) when '3' then r_recharge else 0 end) as Mar,
sum(case month(r_time) when '4' then r_recharge else 0 end) as Apr,
sum(case month(r_time) when '5' then r_recharge else 0 end) as May,
sum(case month(r_time) when '6' then r_recharge else 0 end) as June,
sum(case month(r_time) when '7' then r_recharge else 0 end) as July,
sum(case month(r_time) when '8' then r_recharge else 0 end) as Aug,
sum(case month(r_time) when '9' then r_recharge else 0 end) as Sept,
sum(case month(r_time) when '10' then r_recharge else 0 end) as Oct,
sum(case month(r_time) when '11' then r_recharge else 0 end) as Nov,
sum(case month(r_time) when '12' then r_recharge else 0 end) as Dece
from rechargeinfo
where year(r_time)=#{toyear};
</select> <!--统计停车-->
<select id="getParkingTotal" parameterType="String" resultType="java.util.LinkedHashMap">
select
sum(case month(p_leavetime) when '1' then p_cost else 0 end) as Jan,
sum(case month(p_leavetime) when '2' then p_cost else 0 end) as Feb,
sum(case month(p_leavetime) when '3' then p_cost else 0 end) as Mar,
sum(case month(p_leavetime) when '4' then p_cost else 0 end) as Apr,
sum(case month(p_leavetime) when '5' then p_cost else 0 end) as May,
sum(case month(p_leavetime) when '6' then p_cost else 0 end) as June,
sum(case month(p_leavetime) when '7' then p_cost else 0 end) as July,
sum(case month(p_leavetime) when '8' then p_cost else 0 end) as Aug,
sum(case month(p_leavetime) when '9' then p_cost else 0 end) as Sept,
sum(case month(p_leavetime) when '10' then p_cost else 0 end) as Oct,
sum(case month(p_leavetime) when '11' then p_cost else 0 end) as Nov,
sum(case month(p_leavetime) when '12' then p_cost else 0 end) as Dece
from parkinginfo
where year(p_leavetime)=#{toyear} and p_condition='交易完成' ;
</select> </mapper>

  

   Control层:

 //统计页面
@RequestMapping("/totalui")
public ModelAndView test(@RequestParam(value ="toyear",required = false,defaultValue = "2019")String toyear){
ModelAndView mv = new ModelAndView();
// get all data
Map<String, Double> rechargeTotal = service.getRechargeTotal(toyear);
Map<String,Double> pachargeTotal = service.getParkingTotal(toyear);
// test
System.out.println("测试所有数据: "+rechargeTotal.values()+" ");
System.out.println("测试所有数据 : "+ pachargeTotal.values()+" "); // 统计
Map<String,Double> datatotal = new LinkedHashMap<>();
for(String key:rechargeTotal.keySet()){
if(pachargeTotal.containsKey(key)){
datatotal.put(key, rechargeTotal.get(key)+pachargeTotal.get(key));
}
}
System.out.println("合并后的数据!!!"+datatotal.values()); // set atrr
mv.addObject("redata",rechargeTotal.values());
mv.addObject("padata",pachargeTotal.values());
mv.addObject("totaldata",datatotal.values());
mv.setViewName("Income");
return mv; }

    前端页面显示图代码:

 <script>
var chart = Highcharts.chart('container', {
chart: {
type: 'column'
},
title: {
text: '洱海湾停车场营业额统计'
}, legend: {
align: 'right',
verticalAlign: 'middle',
layout: 'vertical'
},
xAxis: {
categories: ['一月', '二月', '三月', '四月', '五月', '六月', '七月', '八月', '九月', '十月', '十一月', '十二月'],
labels: {
x: -10
}
},
yAxis: {
allowDecimals: false,
title: {
text: '金额'
}
},
series: [{
name: '会员充值收入',
data: ${redata}
}, {
name: '停车收入',
data: ${padata}
}, {
name: '合计收入',
data: ${totaldata}
}],
responsive: {
rules: [{
condition: {
maxWidth: 1500
},
chartOptions: {
legend: {
align: 'center',
verticalAlign: 'bottom',
layout: 'horizontal'
},
yAxis: {
labels: {
align: 'left',
x: 0,
y: -5
},
title: {
text: '¥金额以元为单位'
}
},
subtitle: {
text: null
},
credits: {
enabled: false
}
}
}]
}
}); </script>

      

  大功告成,不懂得可以直接评论咨询!!!!!

Mysql统计每年每个月的数据——详细教程的更多相关文章

  1. Linux CentOS6.5下编译安装MySQL 5.6.16【给力详细教程】

    一.编译安装MySQL前的准备工作 安装编译源码所需的工具和库 yum install gcc gcc-c++ ncurses-devel perl 安装cmake,从http://www.cmake ...

  2. 简单Sql语句统计每年每个月的数据,每个月为数据的每列,简单SQL练习

    有一张表,数据如下 请写出结果为以下的SQL语句. 在mysql中创建表 CREATE TABLE `aa` (  `id` int(10) NOT NULL AUTO_INCREMENT COMME ...

  3. MySQL解压版配置步骤详细教程

    解压mysql到D盘根目录 在解压路径下复制my-default.ini,修改名称为my.ini 在my.ini内容如下 [client]default-character-set=utf8 [mys ...

  4. Java读取Excel指定列的数据详细教程和注意事项

    本文使用jxl.jar工具类库实现读取Excel中指定列的数据. jxl.jar是通过java操作excel表格的工具类库,是由java语言开发而成的.这套API是纯Java的,并不依赖Windows ...

  5. mysql统计前24小时数据没有补0

    SELECT t1. HOUR HOUR, COUNT(t2. HOUR) count FROM ( SELECT DATE_FORMAT( HOUR), '%y-%m-%d %H' ) HOUR F ...

  6. MySQL 8.0.12 基于Windows 安装教程(超级详细)

    MySQL 8.0.12 基于Windows 安装教程(超级详细) (一步一步来,装不了你找我!) 本教程仅适用Windows系统,如果你原本装了没装上,一定要先删除原本的数据库,执行:mysqld ...

  7. Ubuntu 搭建Web服务器(MySQL+PHP+Apache)详细教程

    Ubuntu 搭建Web服务器(MySQL+PHP+Apache)详细教程 看了好多人的博客,有的不全 or 有问题,整理了一下,适合小白 新手先整理几个小问题 1.为啥使用 Linux 搭建服务器? ...

  8. Windows(x86,64bit)升级MySQL 5.7.17免安装版的详细教程

    MySQL需要升级到5.5.3以上版本才支持Laravel 5.4默认的utf8mb64字符编码.因此就把MySQL升级了一下,期间还是遇到些小问题,记录一下以供参考. 升级准备 备份之前MySql目 ...

  9. .NET 5/.NET Core使用EF Core 5连接MySQL数据库写入/读取数据示例教程

    本文首发于<.NET 5/.NET Core使用EF Core 5(Entity Framework Core)连接MySQL数据库写入/读取数据示例教程> 前言 在.NET Core/. ...

随机推荐

  1. 【Winfrom-无边框窗体】Winform如何拖动无边框窗体?

    去掉边框 this.FormBorderStyle = FormBorderStyle.None; 方法一: Point mouseOff;//鼠标移动位置变量 bool leftFlag;//标签是 ...

  2. CF938D Buy a Ticket dijkstra

    考试T1,建一个反图跑一个最短路就好了~ code: #include <bits/stdc++.h> #define ll long long #define N 200002 #def ...

  3. 对深层嵌套对象进行取值&赋值

    需求如下: let obj = { foo: { bar: { name: 'biz' } } }; // 输出 'biz' this.getObj(obj, 'foo.bar.name'); obj ...

  4. Our Journey of Dalian Ends && Our Journey of Xian Ends 最小费用最大流

    2017 ACM-ICPC 亚洲区(乌鲁木齐赛区)网络赛Our Journey of Dalian Ends 题意:要求先从大连到上海,再从上海打西安,中途会经过其他城市,每个城市只能去一次,出一次, ...

  5. 【原创】go语言学习(五)函数详解1

    目录 1.函数介绍 2.多返回值和可变参数 3.defer语句 4.内置函数介绍 1.函数介绍 1.1定义: 有输⼊入.有输出,⽤用来执⾏行行⼀一个指定任务的代码块. func functionnam ...

  6. Ansible管理上千台主机时需要的速度优化

    1 开启ssh长连接 OpenSSH 5.6版本后SSH支持了Multiplexing 设置参数 ssh_args = -C -o ControlMaster=auto -o ControlPersi ...

  7. 2019 ICPC 沈阳网络赛 J. Ghh Matin

    Problem Similar to the strange ability of Martin (the hero of Martin Martin), Ghh will random occurr ...

  8. (转)hadoop 配置文件解释

    借鉴:https://blog.csdn.net/wangming520liwei/article/details/78923216 Hadoop 参数配置 详解 一.常用端口 组件 节点 默认端口 ...

  9. [Shell]CVE-2017-8464漏洞复现

    0x01 漏洞原理 Windows系统通过解析 .LNK 后缀文件时,是使用二进制来解析的,而当恶意的二进制代码被系统识别执行的时候就可以实现远程代码执行,由于是在explorer.exe进程中运行的 ...

  10. Factor_Analysis

    Factor_Analysis(因子分析) Factor Analysis 简书:较好理解的解释,其中公式有一定的推导(仅展现关键步骤,细节大多需要自行补充),基本为结论式. 感性层面理解:首先,明确 ...