首页 > 代码库 > SQL查询各阶段的统计信息

SQL查询各阶段的统计信息

        我们常常会遇到各种分类统计问题,需要将这些结果一次显示出来。这次老师提出的要求是我想看60分以下多少人,60~70多少人,70~80多少人,80~90多少人,90~100多少人。他们以前做的统计信息是,相同分数的有多少人,不同的分数都会在chart图表里显示一列,这样的效果通常是不被需要的,而且数据多的时候也会乱七八糟,没有美感,所以老师提出上面开始的要求。

        他们以前的效果对应的sql语句是:

<span style="font-size:18px;"><strong>select TestScore As 分数,COUNT(TestScore) As 人数 from T_Scores  where ExamID= '" + hs["ExamID"] + "' group by TestScore</strong></span>

        查询结果:

                  

        这样的查询结果,有几条记录chart图表就会有多少个柱状条,记录越多就会显得杂乱无章。

        修改后的sql语句:

<pre name="code" class="sql"><span style="font-size:18px;"><strong>select count(result1) as '0~60',count(result2) as '60~70',count(result3) as '70~80', count(result4) as '80~90',count(result5) as '90~100'
 from( select (case when TestScore>=0 and TestScore<60 then (StudentNo) end) result1,
  (case when TestScore>=60 and TestScore<70 then (StudentNo) end) result2,
  (case when TestScore>=70 and TestScore<80 then (StudentNo) end) result3,
  (case when TestScore>=80 and TestScore<90 then (StudentNo) end) result4,
  (case when TestScore>=90 then (StudentNo) end) result5
   from T_Scores where ExamID= '" + hs["ExamID"]+" ')t</strong></span>



        查询结果:

            

        这样对各个阶段的人数是多少,就能很清楚的知道了。再对查询结果稍作处理,列和行交换一下,这样就是5行记录,每行就是一个阶段对应的总人数。这样每次查询的结果都是5条,对应绑定的chart表就只有5条柱状条。而他们以前的查询结果是不一定的,得根据学生的成绩而定,所以对应绑定的chart图表的柱状条数也很多,他们会一个学生分数就会对应一条柱状条。

修改之前的就相当于一个详细的记录,而人们往往经常需要的不是一个详细的记录,是总体的大概情况,只有出现问题或特殊需求时才会去看一些详细的情况。这正对应着常说的一句话,“不谋全局者 不足谋一域”,然后大家做的时候就往往将他抛至一边了,所以要试着将一些常说的大道理付诸到咱们的行动上来。