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

以梦为马-不负韶华 2010-11-15 05:19:09
SQL语句如下:

select count(*)as 总数,
sum(case when sex=0 then 1 else 0 end) 男人数,
cast(100*(cast(1.0*sum(case when sex=0 then 1 else 0 end)/count(*) as decimal(18,4)))as varchar(20))+'%' 男占比例
from cj_yonghu


计算结果如下:

总数 男人数 男占比例
157888 92984 58.8900%


问题如下:

我想得到的结果是:

总数 男人数 男占比例
157888 92984 58.89%


该如何做呢?



...全文
674 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
chenguang79 2010-11-17
  • 打赏
  • 举报
回复
SELECT 
CONVERT(float,
CONVERT(decimal(18,4),CONVERT(decimal(18,4),92984)/CONVERT(decimal(18,4),157888))
)*100
  • 打赏
  • 举报
回复
select count(*)as 总数,
sum(case when sex=0 then 1 else 0 end) 男人数,
cast(100*(cast(1.0*sum(case when sex=0 then 1 else 0 end)/count(*) as decimal(18,2)))as varchar(20))+'%' 男占比例
from cj_yonghu

把decimal(18,2)设成 得到的结果是 59.00%

而我要的结果是 58.89%
  • 打赏
  • 举报
回复
O(∩_∩)O谢谢 大家
jiemo587 2010-11-17
  • 打赏
  • 举报
回复
SELECT

CONVERT(decimal(18,2),((CONVERT(decimal(18,4),92984)/CONVERT(decimal(18,4),157888))*100))
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 chenguang79 的回复:]
SQL code
SELECT
CONVERT(float,
CONVERT(decimal(18,4),CONVERT(decimal(18,4),92984)/CONVERT(decimal(18,4),157888))
)*100
[/Quote]


这个结果是:58.890000000000001

也不对。。。
lxyzxq2008 2010-11-15
  • 打赏
  • 举报
回复
[Quote=引用楼主 panyuanyuan 的回复:]
SQL语句如下:

select count(*)as 总数,
sum(case when sex=0 then 1 else 0 end) 男人数,
cast(100*(cast(1.0*sum(case when sex=0 then 1 else 0 end)/count(*) as decimal(18,4)))as varchar(20))+'%' 男占比例
from cj_y……
[/Quote]这个很简单啊,楼主的decimal的小数位设多了啊,改成decimal(18,2)
心中的彩虹 2010-11-15
  • 打赏
  • 举报
回复
[Quote=引用楼主 panyuanyuan 的回复:]
SQL语句如下:

select count(*)as 总数,
sum(case when sex=0 then 1 else 0 end) 男人数,
cast(100*(cast(1.0*sum(case when sex=0 then 1 else 0 end)/count(*) as decimal(18,4)))as varchar(20))+'%' 男占比例
from cj_y……
[/Quote]
substing(cast(round(1.0*sum(case when sex=0 then 1 else 0 end)/count(*),4) as varchar(10),1,5)+'%'
--例子
select substring(cast(round(1.0*2.221/5,4)*100 as varchar(10)),1,5)+'%'
yy1987316 2010-11-15
  • 打赏
  • 举报
回复
decimal(10,2)
百年树人 2010-11-15
  • 打赏
  • 举报
回复
就是小数点的问题吗?

decimal(18,4) 改为 decimal(18,2)
--小F-- 2010-11-15
  • 打赏
  • 举报
回复
dec(18,2)
--小F-- 2010-11-15
  • 打赏
  • 举报
回复
select count(*)as 总数,
sum(case when sex=0 then 1 else 0 end) 男人数,
cast(100*(cast(1.0*sum(case when sex=0 then 1 else 0 end)/count(*) as decimal(18,2)))as varchar(20))+'%' 男占比例
from cj_yonghu

22,209

社区成员

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

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