1. 程式人生 > >SQL語句count統計函式Echarts展示資料資訊

SQL語句count統計函式Echarts展示資料資訊

count統計非空

       進行對資料表中的某一個屬性的查詢和統計,運用group by進行分組後,使用count進行統計。

       比如,通過統計下面表中的學時資訊。

資料表

       使用瞭如下的SQL語句:

select trainHours as groupitemnum,count(trainHours)as groupnum from enchangetrain group by trainHours。

結果資訊

       由於在實際情況中,使用者所要統計的資訊不一定是trainHours屬性,也有可能是帶有null屬性列的trainAddress,如果此時才用同樣的方法進行統計,則統計不出來空屬性列。往往帶有null的空屬性列也要進行統計出來。



select trainAddress as groupitemnum,count(trainAddress)as groupnum from enchangetrain group by trainAddress

如果用上述的方法會出現以下結果:

不理想截圖

       但是在以上的圖表資訊中,我們可以看到,trainAddress屬性為null的值不止一個,我們這時應該用count一個非空的屬性。

       修改後的SQL程式碼如下:

select trainAddress as groupitemnum,count(trainNo)as groupnum from enchangetrain group by trainAddress


       效果截圖如下所示:

理想截圖

前臺部分程式碼

       前臺程式碼例項如下:

 <table>
            <tr>
                <td>
                    <select id="trainType">
                        <option value ="enchangetrain">提升培訓</option>
                        <option value ="onlinetrain"
>
線上培訓</option> <option value="short_train">短期培訓</option> <option value="teachingevaluate">教學評價</option> <option value="singlestudy">單科進修</option> </select> </td> <td> <select id="groupBy"> <option value ="主講人">主講人</option> <option value ="學時">學時</option> <option value="性別">性別</option> <option value="工作單位">工作單位</option> <option value="職稱">職稱</option> <option value ="學歷">學歷</option> <option value ="年齡">年齡</option> <option value="狀態">狀態</option> <option value="年份">年份</option> </select> </td> <td> <button onclick="getStatisticDataList()">查詢</button> </td> </tr> </table> 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程式碼如下:

@Select("select ${groupname} as groupitemnum,count(trainNo) as groupnum from ${trainname} group by ${groupname}")
    public List<GroupInfo> 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<String,Integer> 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<String,String> mapenchange=new HashMap<String,String>();
        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<String,Integer> map=new HashMap<>();
        List<GroupInfo> 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<String,Integer> map=new HashMap<>();
        List<GroupInfo> groupitemnum=adminService.groupitemnum(trainname,trainname1);
        for (GroupInfo groupinfo:groupitemnum) {
            if (groupinfo.getGroupitemnum()==null){
                groupinfo.setGroupitemnum("無狀態");
            }
            map.put(groupinfo.getGroupitemnum(),groupinfo.getGroupnum());
        }

        return map;

       最終的執行結果如下:

效果演示圖