楼主 wise |
Q:如何用SQL的Partition查询来算在每个得分范围内的数量? 数据源表
结果图
A:一般用多层iif函数嵌套使用,比较容易出错。 如本题中的SQL的iif函数使用法:
- select iif(得分<20,"0:19",iif(得分<40,"20:39",iif(得分<60,"40:59",iif(得分<80,"60:79","80:99")))) as Rng,
- count(1) as Rng_count
- from [Sheet1$]
- group by iif(得分<20,"0:19",iif(得分<40,"20:39",iif(得分<60,"40:59",iif(得分<80,"60:79","80:99"))))
现在建议采用Partition函数来进行改进,主要的SQL语句如下:
- Select Partition(得分,0,100,20) As Rng, count(得分) As Rng_count From [Sheet1$] Group By Partition(得分,0,100,20)
Partition函数解释: Partition(number, start, stop, interval) number 必需。整数,在所有范围中判断这个整数是否出现。 start必需。整数,数值范围的开始值,该值不能小于0。 stop必需。整数,数值范围的结束值,该值不能等于或小于start。 interval必需。整数,指示在Start与Stop之间计算的每个范围的大小。该值不能小于1。
测试.rar |
2楼 toby08 |
本例中也可以使用Choose代替IIF的
- Select Choose(得分/20+1,'0:19','20:39','40:59','60:79','80:99') as Rng,
- Count(1) as Rng_count
- From [Sheet1$]
- Group by Choose(得分/20+1,'0:19','20:39','40:59','60:79','80:99')
|