count统计非空
进行对数据表中的某一个属性的查询和统计,运用group by进行分组后,使用count进行统计。
javascript
好比,经过统计下面表中的学时信息。
java
使用了以下的SQL语句:
select trainHours as groupitemnum,count(trainHours)as groupnum from enchangetrain group by trainHours。
web
因为在实际状况中,用户所要统计的信息不必定是trainHours属性,也有多是带有null属性列的trainAddress,若是此时才用一样的方法进行统计,则统计不出来空属性列。每每带有null的空属性列也要进行统计出来。
select trainAddress as groupitemnum,count(trainAddress)as groupnum from enchangetrain group by trainAddress
若是用上述的方法会出现如下结果:
ajax
可是在以上的图表信息中,咱们能够看到,trainAddress属性为null的值不止一个,咱们这时应该用count一个非空的属性。
spring
修改后的SQL代码以下:
数据库
select trainAddress as groupitemnum,count(trainNo)as groupnum from enchangetrain group by trainAddress
json
效果截图以下所示:
session
前台部分代码
前台代码实例以下:
app
提高培训 在线培训 短时间培训 教学评价 单科进修 | 主讲人 学时 性别 工做单位 职称 学历 年龄 状态 年份 | 查询 |
js代码:
function getStatisticDataList()
{
var trainType=document.getElementById("trainType").value;
var groupBy=document.getElementById("groupBy").value;
var data1=[];
var data2=[];
$.ajax({
url: "/getStatisticDataList3",
type: "post",
data: {"trainType":trainType,"groupBy":groupBy},
datatype: "json",
success: function (res) {
for(var i in res){
data1.push(i);
data2.push(res[i]);
}
myChart.setOption(option);
//myChart是一个准备好的echarts的dom
}
})
}
mapper代码以下:
echarts
@Select("select ${groupname} as groupitemnum,count(trainNo) as groupnum from ${trainname} group by ${groupname}")
public List groupitemnum(@Param("trainname") String trainname,@Param("groupname") String groupname);
HashMap进行put非空
经过获取前台用户输入的表名和索要查询的属性进行数据库的查询,并将查询结果展现在前台页面。map进行put是不可以put空值,咱们须要进行一个if的判断。
@RequestMapping(value = "/getStatisticDataList3",method = {RequestMethod.GET, RequestMethod.POST})
@ResponseBody
public Map groupdata(HttpServletRequest request,HttpSession session){
String groupname=request.getParameter("groupBy");
String trainname=request.getParameter("trainType");
String trainname1="";
session.setAttribute("groupname",groupname);
session.setAttribute("trainname",trainname);
HashMap mapenchange=new HashMap();
mapenchange.put("学时","trainHours");
mapenchange.put("主讲人","trainSpeaker");
mapenchange.put("性别","teacherGender");
mapenchange.put("工做单位","workUnit");
mapenchange.put("职称","teacherTitle");
mapenchange.put("学历","educationBackground");
mapenchange.put("年龄","teacherAge");
mapenchange.put("状态","teacherState");
mapenchange.put("年份","trainSpeaker");
if(trainname.equals("enchangetrain")) {
switch (groupname) {
case "学时":
trainname1 = (String) mapenchange.get("学时");
break;
case "主讲人":
trainname1 = (String) mapenchange.get("主讲人");
break;
case "性别":
trainname1 = (String) mapenchange.get("性别");
break;
case "工做单位":
trainname1= (String) mapenchange.get("工做单位");
break;
case "职称":
trainname1= (String) mapenchange.get("职称");
break;
case "学历":
trainname1= (String) mapenchange.get("学历");
break;
case "年龄":
trainname1= (String) mapenchange.get("年龄");
break;
//
case "状态":
trainname1 = (String) mapenchange.get("状态");
break;
case "年份":
trainname1= (String) mapenchange.get("年份");
break;
}
}
Map map=new HashMap<>();
List groupitemnum=adminService.groupitemnum(trainname,trainname1);
for (GroupInfo groupinfo:groupitemnum) {
// if (groupinfo.getGroupitemnum()==null){
// groupinfo.setGroupitemnum("无状态");
// }
map.put(groupinfo.getGroupitemnum(),groupinfo.getGroupnum());
}
return map;
}
上述代码,咱们在选中 提高培训 和 工做单位属性时, 在IDEA中会产生如下错误:
Failed to write HTTP message: org.springframework.http.converter.HttpMessageNotWritableException: Could not write JSON: Null key for a Map not allowed in JSON (use a converting NullKeySerializer?); nested exception is com.fasterxml.jackson.core.JsonGenerationException: Null key for a Map not allowed in JSON (use a converting NullKeySerializer?)
就是由于,put的时候key是null值产生错误。咱们能够添加一个if的判断,将null值进行改变,能够加入如下代码:
Map map=new HashMap<>();
List groupitemnum=adminService.groupitemnum(trainname,trainname1);
for (GroupInfo groupinfo:groupitemnum) {
if (groupinfo.getGroupitemnum()==null){
groupinfo.setGroupitemnum("无状态");
}
map.put(groupinfo.getGroupitemnum(),groupinfo.getGroupnum());
}
return map;
最终的运行结果以下: