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

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

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

1 -- 会员充值表

2 CREATE TABLE rechargeinfo(

3 r_num INT PRIMARY KEY COMMENT '充值编号',

4 v_card VARCHAR(12) COMMENT '会员卡号',

5 r_recharge DOUBLE COMMENT '充值金额',

6 r_payway VARCHAR(20) COMMENT '支付方式',

7 o_id INT COMMENT '操作员工编号',

8 r_time DATETIME COMMENT '交易时间',

9 r_remark VARCHAR(50) COMMENT '交易备注',

10 FOREIGN KEY (o_id) REFERENCES operatorinfo(o_id)

11 )ENGINE = InnoDB COMMENT '会员充值信息表';

12 alter table rechargeinfo change r_time r_time timestamp not null default NOW();

13

14 --停车登记表

15

16 CREATE TABLE parkinginfo(

17 p_num INT PRIMARY KEY COMMENT '停车编号',

18 c_carplate VARCHAR(20) NOT NULL COMMENT '车牌号',

19 p_card VARCHAR(20) COMMENT '停车牌号',

20 p_picture VARCHAR(50) COMMENT '进场拍摄图',

21 p_entrytime Date COMMENT '进场时间',

22 p_leavetime Date COMMENT '出场时间',

23 p_type VARCHAR(10) COMMENT '客户类型',

24 p_cost Double COMMENT '停车费用',

25 p_payway VARCHAR(20) COMMENT '支付方式',

26 v_card VARCHAR(12) COMMENT '会员卡号',

27 v_phone VARCHAR(12) COMMENT '临时客户手机号码',

28 p_condition VARCHAR(20) DEFAULT '正在停车中' COMMENT '状态',

29 p_remark VARCHAR(50) COMMENT '备注'

30

31 )ENGINE = InnoDB COMMENT '停车信息表';

32 alter table parkinginfo change p_entrytime p_entrytime timestamp not null default NOW();

接下来就是重点了:

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

1 select

2 sum(case month(r_time) when '1' then r_recharge else 0 end) as Jan,

3 sum(case month(r_time) when '2' then r_recharge else 0 end) as Feb,

4 sum(case month(r_time) when '3' then r_recharge else 0 end) as Mar,

5 sum(case month(r_time) when '4' then r_recharge else 0 end) as Apr,

6 sum(case month(r_time) when '5' then r_recharge else 0 end) as May,

7 sum(case month(r_time) when '6' then r_recharge else 0 end) as June,

8 sum(case month(r_time) when '7' then r_recharge else 0 end) as July,

9 sum(case month(r_time) when '8' then r_recharge else 0 end) as Aug,

10 sum(case month(r_time) when '9' then r_recharge else 0 end) as Sept,

11 sum(case month(r_time) when '10' then r_recharge else 0 end) as Oct,

12 sum(case month(r_time) when '11' then r_recharge else 0 end) as Nov,

13 sum(case month(r_time) when '12' then r_recharge else 0 end) as Dece

14 from rechargeinfo

15 where year(r_time)='2019';

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

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

import java.util.Map;

public interface TotalDao {

Map getRechargeTotal(String toyear);

Map getParkingTotal(String toyear);

}

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

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

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='交易完成' ;

Control层:

1 //统计页面

2 @RequestMapping("/totalui")

3 public ModelAndView test(@RequestParam(value ="toyear",required = false,defaultValue = "2019")String toyear){

4 ModelAndView mv = new ModelAndView();

5 // get all data

6 Map rechargeTotal = service.getRechargeTotal(toyear);

7 Map pachargeTotal = service.getParkingTotal(toyear);

8 // test

9 System.out.println("测试所有数据: "+rechargeTotal.values()+" ");

10 System.out.println("测试所有数据 : "+ pachargeTotal.values()+" ");

11

12 // 统计

13 Map datatotal = new LinkedHashMap<>();

14 for(String key:rechargeTotal.keySet()){

15 if(pachargeTotal.containsKey(key)){

16 datatotal.put(key, rechargeTotal.get(key)+pachargeTotal.get(key));

17 }

18 }

19 System.out.println("合并后的数据!!!"+datatotal.values());

20

21 // set atrr

22 mv.addObject("redata",rechargeTotal.values());

23 mv.addObject("padata",pachargeTotal.values());

24 mv.addObject("totaldata",datatotal.values());

25 mv.setViewName("Income");

26 return mv;

27

28 }

前端页面显示图代码:

1

2 var chart = Highcharts.chart('container', {

3 chart: {

4 type: 'column'

5 },

6 title: {

7 text: '洱海湾停车场营业额统计'

8 },

9

10 legend: {

11 align: 'right',

12 verticalAlign: 'middle',

13 layout: 'vertical'

14 },

15 xAxis: {

16 categories: ['一月', '二月', '三月', '四月', '五月', '六月', '七月', '八月', '九月', '十月', '十一月', '十二月'],

17 labels: {

18 x: -10

19 }

20 },

21 yAxis: {

22 allowDecimals: false,

23 title: {

24 text: '金额'

25 }

26 },

27 series: [{

28 name: '会员充值收入',

29 data: ${redata}

30 }, {

31 name: '停车收入',

32 data: ${padata}

33 }, {

34 name: '合计收入',

35 data: ${totaldata}

36 }],

37 responsive: {

38 rules: [{

39 condition: {

40 maxWidth: 1500

41 },

42 chartOptions: {

43 legend: {

44 align: 'center',

45 verticalAlign: 'bottom',

46 layout: 'horizontal'

47 },

48 yAxis: {

49 labels: {

50 align: 'left',

51 x: 0,

52 y: -5

53 },

54 title: {

55 text: '¥金额以元为单位'

56 }

57 },

58 subtitle: {

59 text: null

60 },

61 credits: {

62 enabled: false

63 }

64 }

65 }]

66 }

67 });

68

69

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

关于找一找教程网

本站文章仅代表作者观点,不代表本站立场,所有文章非营利性免费分享。

本站提供了软件编程、网站开发技术、服务器运维、人工智能等等IT技术文章,希望广大程序员努力学习,让我们用科技改变世界。

[Mysql统计每年每个月的数据——详细教程]http://www.zyiz.net/tech/detail-97379.html

mysql 统计每年的数据统计_Mysql统计每年每个月的数据——详细教程相关推荐

  1. 数据库mysql怎么清空缓存_MySQL数据库如何清空缓存?详细教程在这里

    众所周知,数据库是用来存储数据的.当然数据库根据数据的需求不同分为很多类型.在众多数据库中,MySQL数据库是我们比较常见的,也是应用比较多的.但是很多新手MySQL数据库使用者,对于MySQL数据库 ...

  2. mysql中更新的命令是_MySQL 语言中,更新表数据的命令是( )。_学小易找答案

    [简答题]MySQL 语言中包含数都定义语言.数据操纵语言和数据控制语言,分别有哪些功能? [单选题]查询员工工资信息时,结果按工资降序排列,正确的是( ). [简答题]arrayList测验 [填空 ...

  3. mysql将查到的数据删除_MySQL基本SQL语句之数据插入、删除数据和更新数据 | 旺旺知识库...

    一.INSERT插入数据: 方法一:批量插入 基本语法: INSERT INTO tb_name (col1, col2, ...) VALUES (val1, val2, ...)[,(val1, ...

  4. mysql的select复合查询语法_MySQL(九)之数据表的查询详解(SELECT语法)二

    上一篇讲了比较简单的单表查询以及MySQL的组函数,这一篇给大家分享一点比较难得知识了,关于多表查询,子查询,左连接,外连接等等.希望大家能都得到帮助! 在开始之前因为要多表查询,所以搭建好环境: 1 ...

  5. Flayway mysql自动生成版本_Flyway详解及Springboot集成Flyway的详细教程

    Flayway是一款数据库版本控制管理工具,,支持数据库版本自动升级,Migrations可以写成sql脚本,也可以写在java代码里:不仅支持Command Line和java api ,也支持Bu ...

  6. mysql统计姓名为小明_Mysql 统计查询相同字段只统计一条

    ORDER表 ID      NUMBER          users_name 1        1XC                             小明 2        1XC   ...

  7. mysql查看比较大的数据表_mysql 如何查看哪些表数据量比较大

    数据库中有几十上百张表,那么哪些表的数据量比较大呢,总不能一个表一个表的去查询吧,在mysql中也有类似于oracle的数据字典表,只不过mysql没有oracle记录的那么多和详细,但也足够我们查询 ...

  8. mysql oracle 数据类型转换_Mysql与Oracle之间的数据类型转换

    [转]MYSQL 与 Oracle 之间的数据类型转换

  9. mysql查询单表的销售额_MYsql数据库单表百万数据量查询

    最近总在意自己的网页刷新数据的速度,mysql5.7和mysql8.0单表数据库导入百万甚至千万数据的时候,会不会卡死,会不会慢? 因此编写测试用例,通过Navicat Premium来查询单表的时间 ...

  10. mysql 大批量数据查询_mysql 处理 多条件 大批量数据 查询

    2013-04-27 回答 在我们使用mysql数据库时,比较常用也是查询,包括基本查询,关联查询,条件查询等等,对于同一个操作,sql语句的实现有很多种写法,但是不同的写法查询的性能可能会有很大的差 ...

最新文章

  1. java项目乱码_JavaWeb应用项目中文乱码的解决
  2. jdbc-connect-oracle12c-pdb/cdb(jdbc连接oracle12c的pdb和cdb)
  3. Spring Boot Elasticsearch 入门
  4. mysql 临时文件目录_MySQL数据库的临时文件究竟储存在哪里
  5. java对象转xml jackson_五分钟Jackson入门(三) JSON数据类XML转换(附项目源码)
  6. 378. 有序矩阵中第K小的元素
  7. 任正非要“拿钱砸人”的芯片产业:平均薪资 10424 元,人才缺口超 30 万!
  8. java项目 干洗店源码,基于jsp的干洗店管理系统-JavaEE实现干洗店管理系统 - java项目源码...
  9. HashMap的工作原理深入再深入
  10. 计算机文化基础清华大学出版社,清华大学出版社-图书详情-《计算机基础》
  11. 异构计算全新升级,阿里云全方位释能人工智能产业
  12. idm2021中文版序列号加速下载百度云网盘大文件教程
  13. 声鉴卡HTML5网页源码
  14. 计算机高级计算,windows系统自带计算器高级用法分享
  15. Oracle创建用户后无法登录,报错ORA-01045: user lacks CREATE SESSION privilege
  16. 解决在VsCode中使用CodeRunner中文乱码
  17. H-A + B用于投入产出实践(VIII)
  18. 「硬见小百科」100个示波器基础知识问答
  19. 数据表为什么又叫透明表?
  20. 超人气代码格式化工具prettier

热门文章

  1. BLOCK层代码分析(10)IO下发之IO下发函数总结
  2. Xshell、xftp 安装PJ 以及使用
  3. win10下idea的ctrl+shit+f和F8快捷键失效解决办法
  4. 自定义View-SideBar
  5. 盛世昊通2022全新布局,九大生态板块赋能产业数字化
  6. 全球及中国射频器件市场规模格局与投资战略决策报告2022版
  7. rt1052 usb速率_如何才能赋予RT1052超级视频编解码能力?
  8. 圣诞的荒诞小故事并记录互联网协议-五层模型
  9. 牛客_美团点评2020校招前端笔试题(仅个人学习记录)
  10. 用手机访问计算机共享资源,手机访问电脑文件 手机与电脑如何共享数据?AirShareUp 云悦享...