SQL语句计算男女各占总人数比例

以梦为马-不负韶华 2010-11-03 11:35:29
SQL语句如下:

select
count(*) as 人口总数,
sum(case when sex=0 then 1 else 0 end) 男人数,
sum(case when sex=0 then 1 else 0 end)/count(*)男所占比例,
sum(case when sex=1 then 1 else 0 end) 女人数,
sum(case when sex=1 then 1 else 0 end) /count(*)女所占比例
from cj_yonghu

执行结果是:

人口数 男人数 男所占比例 女人数 女所占比例
10 2 0 8 0

这个结果不对的,

大家帮忙看看,怎么修改呢?

O(∩_∩)O谢谢了
...全文
5555 15 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
O(∩_∩)O谢谢大家

更谢谢“不值一提” 你的办法可行
shuaicool_mating 2010-11-04
  • 打赏
  • 举报
回复
执行出来的结果转换一下,限制一下小数位应该就可以了吧
whatpn 2010-11-04
  • 打赏
  • 举报
回复
每天回贴有10分哦!
--小F-- 2010-11-03
  • 打赏
  • 举报
回复
select  
count(*) as 人口总数,
sum(case when sex=0 then 1 else 0 end) 男人数,
sum(case when sex=0 then 1 else 0 end)*1.0/count(*)男所占比例,
sum(case when sex=1 then 1 else 0 end) 女人数,
sum(case when sex=1 then 1 else 0 end)*1.0 /count(*)女所占比例
from cj_yonghu
xuam 2010-11-03
  • 打赏
  • 举报
回复
count(*) as 人口总数,
sum(case when sex=0 then 1.00 else 0.00 end) 男人数,
sum(case when sex=0 then 1.00 else 0.00 end)/count(*)男所占比例,
sum(case when sex=1 then 1.00 else 0.00 end) 女人数,
sum(case when sex=1 then 1.00 else 0.00 end) /count(*)女所占比例
from cj_yonghu
abuying 2010-11-03
  • 打赏
  • 举报
回复
因为变量之间运算,如果没有指定类型,默认取整!
select
count(*) as 人口总数,
sum(case when sex=0 then 1 else 0 end) 男人数,
cast(cast(100.0*sum(case when sex=0 then 1 else 0 end)/count(*) as decimal(18,2)) as varchar(5))+'%' 男所占比例,
sum(case when sex=1 then 1 else 0 end) 女人数,
cast(cast(100.0*sum(case when sex=1 then 1 else 0 end)/count(*) as decimal(18,2)) as varchar(5))+'% 女所占比例
from cj_yonghu
  • 打赏
  • 举报
回复
怎么能等于 0.2% 0.8% 呢???
xuam 2010-11-03
  • 打赏
  • 举报
回复
还要×100
[Quote=引用 8 楼 panyuanyuan 的回复:]
引用 7 楼 coleling 的回复:
select
count(*) as 人口总数,
sum(case when sex=0 then 1 else 0 end) 男人数,
cast(100.0*sum(case when sex=0 then 1 else 0 end)/count(*) as varchar(20))+'%' 男所占比例, --加上1.0,否则整数/整数取的还是整……
[/Quote]
starseeker7 2010-11-03
  • 打赏
  • 举报
回复
類似這樣?
select cast(convert(numeric(18, 2),2.0000)as varchar(20))+'%'
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 coleling 的回复:]
select
count(*) as 人口总数,
sum(case when sex=0 then 1 else 0 end) 男人数,
cast(100.0*sum(case when sex=0 then 1 else 0 end)/count(*) as varchar(20))+'%' 男所占比例, --加上1.0,否则整数/整数取的还是整数
sum(case when sex……
[/Quote]
这个执行结果是: 20.00000000000% 80.00000000000%

我改成这个:

select
count(*) as 人口总数,
sum(case when sex=0 then 1 else 0 end) 男人数,
cast(1.0*sum(case when sex=0 then 1 else 0 end)/count(*) as varchar(20))+'%' 男所占比例, --加上1.0,否则整数/整数取的还是整数
sum(case when sex=1 then 1 else 0 end) 女人数,
cast(1.0*sum(case when sex=1 then 1 else 0 end)/count(*) as varchar(20))+'%' 女所占比例
from cj_yonghu

执行结果是: 0.200000000000% 0.800000000000%


怎么能等于 0.2% 0.8% 呢???

coleling 2010-11-03
  • 打赏
  • 举报
回复
select
count(*) as 人口总数,
sum(case when sex=0 then 1 else 0 end) 男人数,
cast(100.0*sum(case when sex=0 then 1 else 0 end)/count(*) as varchar(20))+'%' 男所占比例, --加上1.0,否则整数/整数取的还是整数
sum(case when sex=1 then 1 else 0 end) 女人数,
cast(100.0*sum(case when sex=1 then 1 else 0 end)/count(*) as varchar(20))+'%' 女所占比例
from cj_yonghu
  • 打赏
  • 举报
回复
应该是 : 0.2% 这样才对的
  • 打赏
  • 举报
回复
执行结果是: .200000000000 也不对啊!
fpzgm 2010-11-03
  • 打赏
  • 举报
回复

select
count(*) as 人口总数,
sum(case when sex=0 then 1 else 0 end) 男人数,
1.0*sum(case when sex=0 then 1 else 0 end)/count(*) 男所占比例, --加上1.0,否则整数/整数取的还是整数
sum(case when sex=1 then 1 else 0 end) 女人数,
1.0*sum(case when sex=1 then 1 else 0 end)/count(*) 女所占比例
from cj_yonghu

jamk 2010-11-03
  • 打赏
  • 举报
回复
嗯,少了一个1.0,之前我也出现过这样的问题。。除法小数得不到。

22,300

社区成员

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

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