MySQL分段统计SQL写法 与 Mybatis 异常 java.math.BigDecimal cannot be cast to java.lang.Integer

摘要:
正确的处理方法是,返回Map,然后{"=90":5}intcount1=Integer.parseInt;通过Object类型的toString()方法,然后Integer.parseInt()这里才能得到正确的结果。2)mysql分段统计方法:sum
mysql> select
    -> sum(case when score<60 then 1 else 0 end) as '<60',
    -> sum(case when score>=60 and score<=69 then 1 else 0 end) as '60~69',
    -> sum(case when score>=70 and score<=79 then 1 else 0 end) as '70~79',
    -> sum(case when score>=80 and score<=89 then 1 else 0 end) as '80~89',
    -> sum(case when score>-90 then 1 else 0 end) as '>=90'
    -> fromstudent_course
    ->;
+------+-------+-------+-------+------+
| <60  | 60~69 | 70~79 | 80~89 | >=90 |
+------+-------+-------+-------+------+
|    2 |     1 |     1 |     1 |   10 |
+------+-------+-------+-------+------+

采用mybatis时,xml文件配置如下处理:

  <select id="getScoreStatistics"resultType="map">
      select 
        sum(case when score &lt; 60 then 1 else 0 end) as '&lt;60',
        sum(case when score &gt;= 60 and score &lt;= 69 then 1 else 0 end) as '60~69',
        sum(case when score &gt;= 70 and score &lt;= 79 then 1 else 0 end) as '70~79',
        sum(case when score &gt;= 80 and score &lt;= 89 then 1 else 0 end) as '80~89',
        sum(case when score &gt;= 90 then 1 else 0 end) as '&gt;=90'
    from student_course
  </select>

mapper接口:

Map<String, Object> getScoreStatistics();

注意,这里如果使用 Map<String, Integer> 作为返回值,会报错:

java.math.BigDecimal cannot be cast to java.lang.Integer

原因是,sum() 的结果是作为 java.math.BigDecimal 来处理的, 而他不能直接转换成 java.lang.Integer,所以报错。

正确的处理方法是,返回 Map<String, Object>,然后

{"<60":2,"60~69":1,"70~79":1,"80~89":1,">=90":5}

int count1 = Integer.parseInt(resultMap.get("<60").toString());

通过Object类型的 toString()方法,然后 Integer.parseInt() 这里才能得到正确的结果。

当然我们也可以直接返回:Map<String, BigDecimal> getScoreStatistics();

然后通过BigDecimal.intValue() 来获得我们需要的值:

    Map<String, BigDecimal> getScoreStatistics();
Map<String, BigDecimal> resultMap = this.studentCourseMapper.getScoreStatistics();
int
count = resultMap.get("<60").intValue();

总结

1)sql中的 sum() 返回返回值在mybatis中是作为BigDecimal来返回的,所以我们有两种方法来处理:

1> 返回 Object 值,然后通过 Integer.parseInt(obj.toString()); 来得到int值;

2> 返回 BigDecimal 值,然后通过 BigDecimal.intValue()得到需要的值,应该说我们推荐使用第二种方法。

2)mysql分段统计方法:sum(case when score<60 then 1 else 0 end)

免责声明:文章转载自《MySQL分段统计SQL写法 与 Mybatis 异常 java.math.BigDecimal cannot be cast to java.lang.Integer》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇如何解决找不到方法HttpServletRequest.getServletContext() ---- NoSuchMethodError聊一聊Jmeter用IF控制器处理接口依赖下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

wav文件头详解,看懂wav文件

工作中部门萌新常问的wav文件头格式及怎么看wav文件, 且有时会遇到   “伪.pcm”  格式 现总结如下:   WAV是最常见的声音文件格式之一,是微软公司专门为Windows开发的一种标准数字音频文件,该文件能记录各种单声道或立体声的声音信息,并能保证声音不失真。但WAV文件有一个缺点,就是它所占用的磁盘空间太大(每分钟的音乐大约需要12兆磁盘空间...

Delphi7中 string, AnsiString, Utf8String,WideString的区别分析(转)

Windows系统上的 Notepad.exe 打开文件后,点击“文件”菜单中的“另存为”命令,会跳出一个对话框,在最底部有一个“编码”的下拉条。里面有四个选项:ANSI,Unicode,Unicode big endian 和 UTF-8。1)ANSI是默认的编码方式。对于英文文件是ASCII编码,对于简体中文文件是GB2312编码(只针对Windows...

调用钉钉接口发送消息

1.首先登陆钉钉开发者后台 https://ding-doc.dingtalk.com/ 2.选择H5微应用,创建应用 4.创建好之后,查看所建好的应用信息 其中AgentId,AppKey,AppSecret很重要,调用时需要用到 5.直接上代码看效果 1 string appkey = "dingv0cab6brl1ax6exd"; 2...

matlab 中如何创建以及获取popupmenu的值

1.如何创建popupmenu的值 如图,点击河南左边的符号,会弹出右边的小窗口,输入完一项之后点击enter继续创建第二项即可。 2.如何获取popupmenu的值 functionpopupmenu_Callback(hObject, eventdata, handles) val = get(handles.popupmenu,'value...

DATASNAP REST WEBSERVICES中间件如何跨平台使用

准备使用DELPHI开发移动设备开发的朋友对DATASNAP REST中间件不可不了解。 DATASNAP REST新型WEBSERVICES中间件使用的通信协议和数据封装格式: 使用HTTP通信协议,HTTP协议哪个平台都支持;使用JSON作为数据的封装格式,几乎所有的开发语言都可以解析JSON数据。 REST的目的就是通过简单的URL来完成对中间层远程...

如何分析和提高(C/C++)程序的编译速度?

版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。 本文链接:https://www.cnblogs.com/lihuidashen/p/12937085.html 微信链接:https://mp.weixin.qq.com/s/MFOaa-Dw1iNMXuXPfXjLBA 一个别人的vs 2010 的程序...