88.按指定上下限区间进行数据统计的案例

--测试数据
DECLARE @t TABLE(ID int PRIMARY KEY,col decimal(10,2))
INSERT @t SELECT 1 ,26.21
UNION ALL SELECT 2 ,88.19
UNION ALL SELECT 3 , 4.21
UNION ALL SELECT 4 ,76.58
UNION ALL SELECT 5 ,58.06
UNION ALL SELECT 6 ,53.01
UNION ALL SELECT 7 ,18.55
UNION ALL SELECT 8 ,84.90
UNION ALL SELECT 9 ,95.60

--统计
SELECT a.Description,
	Record_count=COUNT(b.ID),
	[Percent]=CASE 
		WHEN Counts=0 THEN '0.00%'
		ELSE CAST(CAST(
			COUNT(b.ID)*100./c.Counts
			as decimal(10,2)) as varchar)+'%'
		END
FROM(
	SELECT sid=1,a=NULL,b=30  ,Description='<30' UNION ALL
	SELECT sid=2,a=30  ,b=60  ,Description='>=30 and <60' UNION ALL
	SELECT sid=3,a=60  ,b=75  ,Description='>=60 and <75' UNION ALL
	SELECT sid=4,a=75  ,b=95  ,Description='>=75 and <95' UNION ALL
	SELECT sid=5,a=95  ,b=NULL,Description='>=95' 
)a LEFT JOIN @t b 
	ON (b.col=a.a OR a.a IS NULL)
	CROSS JOIN(
		SELECT COUNTS=COUNT(*) FROM @t
	)c
GROUP BY a.Description,a.sid,c.COUNTS
ORDER BY a.sid
/*--结果:
Description    Record_count  Percent
------------------- ------------------ ---------------------- 
<30          3            33.33%
>=30 and <60  2            22.22%
>=60 and <75  0            0.00%
>=75 and <95  3            33.33%
>=95         1            11.11%
--*/
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值