sql 分组统计后,怎么算占比。急求。。

lxming188 2011-10-12 09:52:34
比如有一张表
编号 类型 数量
1 A 2
2 B 6
3 C 1
4 B 3
5 A 5
我要统计同类记录的数量和在总数中占的比例
例子中的总数是2+6+1+3+5=17 类型A的数量和是2+5=8 B是6+3=9 C是1
因此A在总数中占的比例就是8/17=47% B为9/17=52% C为1/17=5%
结果表大致为
类型 比例
A 47%
B 52%
C 5%
请问用一条SQL语句应该怎么写 要求比例用百分比或者小数显示
...全文
13823 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
qingdu_li 2011-10-13
  • 打赏
  • 举报
回复
不加,就会取整
[Quote=引用 5 楼 lxming188 的回复:]
为什么要 * 1.00 。我写的没有,结果比例都是0,为什么呢。
[/Quote]
lxming188 2011-10-12
  • 打赏
  • 举报
回复
为什么要 * 1.00 。我写的没有,结果比例都是0,为什么呢。
lxming188 2011-10-12
  • 打赏
  • 举报
回复
为什么要* 1.00 ,我写的没有,比例都是0,怎么回事?
hao1hao2hao3 2011-10-12
  • 打赏
  • 举报
回复

if object_id('tb') >0
drop table tb
create table tb
(
a int identity,
b varchar(2),
c int
)
go

insert into tb(b,c)
select 'a',2
union all
select 'b',6
union all
select 'c',1
union all
select 'b',3
union all
select 'a',5


select b, left(round( sum(c) * 1.00/(select sum(c) from tb) ,2),4)
from tb
group by b



a 0.41
b 0.53
c 0.06

--小F-- 2011-10-12
  • 打赏
  • 举报
回复
--修改
select
类型,
ltrim(cast(sum(数量)*100.0/(sleect sum(数量) from tb) as dec(18,2)))+'%'
from
tb
group by
类型
--小F-- 2011-10-12
  • 打赏
  • 举报
回复
select
类型,
ltrim(cast(count(1)*100.0/(sleect count(1) from tb) as dec(18,2)))+'%'
from
tb
group by
类型

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧